按位移位运算符.签名和未签名

18 java scjp bit-shift

我正在使用互联网上的补习说进行SCJP考试.

根据我的说明,>>操作员应该是右移,右边是符号位.虽然左移位运算符<<应该保留符号位.

然而,在我周围玩耍时,我可以用<<操作员移动标志(fe Integer.MAX_VALUE << 1评估为-2,而我永远无法用>>操作员移动标志.

我一定是在误解这里的东西,但是什么?

Rom*_*man 45

">>"已签名,因为它保留了标志.它使用数字的二进制表示中最左边的数字作为填充符.例如:

    | this value is used as a filler 
    11011011 
 >> 11101101  

    01010010
 >> 00101001 
Run Code Online (Sandbox Code Playgroud)

">>>"是此运算符的无符号版本.它总是使用零作为填充物:

    11011011 
>>> 01101101  

    01010010
>>> 00101001
Run Code Online (Sandbox Code Playgroud)

在二进制表示中,最左边的数字确定数字的符号.所以,如果它是'1'那么我们有负值,如果它是'0' - 那么我们的数字是正数.这就是为什么使用最左边的数字作为填充物可以使符号保持永久性.