在Java中:
(0xFFFFFFFF << 1) = 0xFFFFFFFE = 0b1111111111111110
: : :
(0xFFFFFFFF << 30) = 0xE0000000 = 0b1110000000000000
(0xFFFFFFFF << 30) = 0xC0000000 = 0b1100000000000000
(0xFFFFFFFF << 31) = 0x80000000 = 0b1000000000000000
Run Code Online (Sandbox Code Playgroud)
然而:
(0xFFFFFFFF << 32) = 0xFFFFFFFF = 0b1111111111111111
Run Code Online (Sandbox Code Playgroud)
逻辑上这没有任何意义,但我认为发生的事情是Java执行类似于以下操作的操作:
a << (b % Integer.SIZE) [编辑,显然:] a << (b & 0x1F)
这也适用于>>和>>>,太.
显然,移位> = 32(在整数的情况下)会从数据类型中删除所有数据,但有时这很有用.例如:
int value = 0x3F43F466; // any value
int shift = 17; // any value >= 0
int carry = value …Run Code Online (Sandbox Code Playgroud)