我有一个用以下代码制作的long:
long binary = 0b1L<< 63;
这给出了预期的结果,一个位于第63个索引的结果:
1000000000000000000000000000000000000000000000000000000000000000
但当我花这么长时间,并应用>gt;运算符,它给了我一个意想不到的结果。例如,当我在上面的二进制文件上调用这个代码片段时:
long newBinary = binary >>8;
它向右移动了正确的数量,但它用一填充了前导零:
1111111110000000000000000000000000000000000000000000000000000000
发生这种情况的具体原因是什么?
>>
是有符号右移运算符,每次用符号位(原始数字的最左边(填充最左边的位置。另一方面,无符号右移运算符>>>
总是用0
填充。
步骤:
1000000000000000000000000000000000000000000000000000000000000000
右移8个位置:
000000001000000000000000000000000000000000000000000000000000000
用原始符号位(1(填充左边的移位位:
111111111000000000000000000000000000000000000000000000000000000
另请参阅:位和位移位运算符