ses*_*ses 8 java int bits operation
为什么如果
int x = -1 // binary: 11111111111111111111111111111111
x = x >>> 31;
Run Code Online (Sandbox Code Playgroud)
我们有00000000000000000000000000000001
但如果
int x = -1
x = x >>> 32;
Run Code Online (Sandbox Code Playgroud)
我们有11111111111111111111111111111111(再次-1)
但不是00000000000000000000000000000000?
Roh*_*ain 13
来自JLS的第15.19节:
如果左侧操作数的提升类型是int,则只使用右侧操作数的五个最低位作为移位距离.就好像右手操作数受到
&带掩码值的按位逻辑AND运算符(第15.22.1节)的影响0x1f (0b11111).因此,实际使用的移位距离始终在包括范围内0 to 31.
强调我的.所以:
x >>> n
Run Code Online (Sandbox Code Playgroud)
相当于:
x >>> n & 0x1f // or x >>> n % 32
Run Code Online (Sandbox Code Playgroud)
所以,x >>> 32相当于x >>> 32 & 0x1f<==> x >>> 0== x.
因此,经验法则是,无论何时将数字移动32(int是32 bits)的倍数,您都会得到相同的值.