Java符号右移

Java符号右移,java,Java,我在java代码中看到了这一点 int n = 300 //passed through a function size = (n + 31) >> 5 //size = 10 5的意义是什么? 31//与int size(31位+1号)有什么关系 谢谢5的意义在于32=2^5 size = (n + 31) >> 5 将size设置为上限(n/32),这是存储n位标志所需的32位整数数 在n中加上31是为了确保股息至少等于32的最小倍数,该倍数大于或等于与股息无关的

我在java代码中看到了这一点

int n = 300 //passed through a function
size = (n + 31) >> 5 //size = 10
5
的意义是什么?
31
//与int size(31位+1号)有什么关系


谢谢

5的意义在于32=2^5

size = (n + 31) >> 5
size
设置为
上限(n/32)
,这是存储
n
位标志所需的32位整数数


n
中加上31是为了确保股息至少等于32的最小倍数,该倍数大于或等于与股息无关的z。为了便于理解,请将其改写为:
(n+31)/32
,意思是“获得n/32的上限”-这对每个数字都适用,即
(n+x-1)/x
将是一般解决方案。移位而不是除法在这里也是混合的,但这是一个单独的主题,我想这里的大多数人已经知道了。我假设这不会比(n+31)/32?@CoryKendall更有效,如果编译器是愚蠢的话。但是,由于查找所需数组的大小通常是一次性的计算,因此没有真正的理由这样做,除非太习惯于位旋转。@Cory如果
n<0
,则它并不等效,因此编译器不能在所有情况下都避免除法,因此如果您知道
n>0
(而编译器不知道),它会有所帮助或者你想要对负数有不同的解释。(请注意,编译器仍然可以使用一些技巧并避免除法,即使n可能是负数,但需要多做一些工作)。