Java签名右移

bsr*_*bsr 4 java

我在java代码中看到过这个.

int n = 300 //passed through a function
size = (n + 31) >> 5 //size = 10
Run Code Online (Sandbox Code Playgroud)

什么可能是重要的5?什么是意义31//应该是与INT大小(31位+ 1号)

谢谢

Dan*_*her 6

5的重要性是32 = 2 ^ 5.

size = (n + 31) >> 5
Run Code Online (Sandbox Code Playgroud)

设置sizeceiling(n/32),即存储n位标志所需的32位整数的数量.

增加31 n是为了确保被除数至少与32的最大倍数大于或等于n.

  • @Cory如果`n <0`它不等同,所以编译器在所有情况下都不能避免除法,所以如果你知道`n> 0`(而编译器没有)或你实际上它可以帮助一点想要对负数进行不同的解释.(注意,编译器仍然可以进行一些操作并避免除法,即使n可能是负数而且工作量更多). (3认同)