我正在使用Internet的补习笔记为SCJP考试练习。
根据我的注释,>>
运算符应该右移符号,而符号位则从左移入。左移位运算符<<
应该保留符号位。
但是,我可以使用<<
运算符来移动符号(例如Integer.MAX_VALUE << 1
的计算结果为-2
,而我永远无法使用>>
运算符来移动符号。
我一定在这里误会了什么,但是呢?
最佳答案
“>>”是带符号的,因为它保留了符号。它使用数字的二进制表示形式中最左边的数字作为填充符。例如:
| this value is used as a filler
11011011
>> 11101101
01010010
>> 00101001
“>>>”是此运算符的未签名版本。它始终使用零作为填充符:
11011011
>>> 01101101
01010010
>>> 00101001
以二进制表示时,最左边的数字确定数字的符号。因此,如果它是“1”,那么我们的值为负;如果它是“0”,那么我们的数字为正。这就是为什么使用最左边的数字作为填充符可以使符号永久保持不变的原因。
关于java - 按位移位运算符。已签名和未签名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2244387/