我遇到了一个问题"为什么-1是零填充右移1 = 2147483647对于Java中的整数?"
从上面的问题的答案中我完全理解了零填充右移的概念.但是当我试图找到-1 >> 1时,我得到了一个非常复杂的答案,我觉得很难理解.
-1 in binary form is as follows: 11111111111111111111111111111111 After flipping the bits, I got: 00000000000000000000000000000000 Upon adding 1 to it, I got: 00000000000000000000000000000001 Now shifting one position right: 00000000000000000000000000000000 After flipping the bits, I got: 11111111111111111111111111111111 Now adding 1 to it: 00000000000000000000000000000000
我不明白-1 >> 1本身是-1,那么?
当您进行正常的右移(即使用>>,也称为算术右移,而不是>>>,逻辑右移)时,数字将被符号扩展。
其工作原理如下:
当我们右移时,我们会在数字前面得到一个空位,如下所示:
11111111111111111111111111111111
?1111111111111111111111111111111(1) (right-shift it one place)
Run Code Online (Sandbox Code Playgroud)
最后一个1移出,然后移入?。
现在,我们如何填写?取决于我们如何转变。
如果我们进行逻辑移位(即>>>),我们只需将其填充为0。如果我们进行算术移位(即>>),我们用原始数字的第一位(即符号位)填充它(因为它是1数字是否为负数,0如果不是)。这称为符号扩展。
因此,在这种情况下,-1 >> 1将 符号扩展1为?,保留原始-1。
| 归档时间: |
|
| 查看次数: |
512 次 |
| 最近记录: |