我为什么>>操作员得到这个意外的结果?



我有一个用以下代码制作的long:

long binary = 0b1L<< 63;

这给出了预期的结果,一个位于第63个索引的结果:

1000000000000000000000000000000000000000000000000000000000000000

但当我花这么长时间,并应用>gt;运算符,它给了我一个意想不到的结果。例如,当我在上面的二进制文件上调用这个代码片段时:

long newBinary = binary >>8;

它向右移动了正确的数量,但它用一填充了前导零:

1111111110000000000000000000000000000000000000000000000000000000

发生这种情况的具体原因是什么?

>>是有符号右移运算符,每次用符号位(原始数字的最左边(填充最左边的位置。另一方面,无符号右移运算符>>>总是用0填充。

步骤:

1000000000000000000000000000000000000000000000000000000000000000

右移8个位置:

000000001000000000000000000000000000000000000000000000000000000

用原始符号位(1(填充左边的移位位:

111111111000000000000000000000000000000000000000000000000000000

另请参阅:位和位移位运算符

最新更新