gpt4 book ai didi

java - 为什么 -1 右移 1 = -1 在 Java 中?

转载 作者:搜寻专家 更新时间:2023-10-31 19:55:36 25 4
gpt4 key购买 nike

我遇到了这个问题 "Why is -1 zero fill right shift 1=2147483647 for integers in Java?"

我从上述问题的答案中完全理解零填充右移的概念。但是当我试图找到 -1>>1 时,我得到了一个我觉得很难理解的完全复杂的答案。

-1 in binary form is as follows: 11111111111111111111111111111111After flipping the bits, I got:  00000000000000000000000000000000Upon adding 1 to it, I got:      00000000000000000000000000000001Now shifting one position right: 00000000000000000000000000000000 After flipping the bits, I got:  11111111111111111111111111111111Now adding 1 to it:              00000000000000000000000000000000

我不明白 -1>>1 是 -1 本身,那?

最佳答案

当您进行正常的右移时(即使用 >>>,也称为算术 右移,而不是 >>>,这是一个逻辑右移),数字是符号扩展

其工作原理如下:

当我们右移时,我们会在数字前面得到一个空位,如下所示:

 11111111111111111111111111111111
?1111111111111111111111111111111(1) (right-shift it one place)

最后的 1 移出,? 移入。

现在,我们如何填写 ? 取决于我们如何移动。

如果我们进行逻辑移位(即>>>),我们只需用0 填充它。如果我们进行算术移位(即>>>),我们会用原始数字的第一位填充它,即符号位(因为如果数字为负数则为 1,否则为 0)。这称为符号扩展。

因此,在这种情况下,-1 >> 11 符号扩展到 ? 中,留下原始 -1.

进一步阅读:

关于java - 为什么 -1 右移 1 = -1 在 Java 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20468564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com