作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我遇到了这个问题 "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 >> 1
将 1
符号扩展到 ?
中,留下原始 -1
.
关于java - 为什么 -1 右移 1 = -1 在 Java 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20468564/
我正在做一个项目,我的 android 在这个项目中作为一个网络服务器工作;输入带端口号的 IP 地址,打开 Web 界面,用户可以将文件上传到手机。我想在 Web 界面上显示一些图片,以便我们的界面
我是一名优秀的程序员,十分优秀!