-1 >>> 32 结果为何是 -1?

2015 年 10 月 12 日
 Maxi
版本是 jdk8u60, 求指教.
4577 次点击
所在节点    Java
11 条回复
jwk345
2015 年 10 月 12 日
int 是 32 位,向右移 n 位, n 会换算成 n mod 32 ,相当于-1>>>0
raptium
2015 年 10 月 12 日
因为其实没有移,左边是 int 的话,右边只看最低 5 bit
左边是 long 右边看 6 bit
32 的话,正好是 100000 ,最低 5 个 bit 全是 0
Maxi
2015 年 10 月 12 日
多谢二位 @jamesxu @raptium
firemiles
2015 年 10 月 13 日
各位都没说到点子上吧,-1 右移任何位数都是-1 ,因为-1 右移后高位补上的是 1 ,所以-1 补码值不会变,一直是-1
coderHuang
2015 年 10 月 13 日
@firemiles 这是算术右移还是逻辑右移?
zealot0630
2015 年 10 月 13 日
面试题的话 @jamesxu @raptium 已经可以回家了
zealot0630
2015 年 10 月 13 日
@firemiles 留下来参加下一轮面试
future0906
2015 年 10 月 13 日
@firemiles

误认子弟就是你,哈哈。不熟 Java ,特意去查了,>>>是逻辑右移,不补符号的。

话说, Java 这样子优化真的没问题?
firemiles
2015 年 10 月 13 日
@future0906 不好意思, java 不熟,不知道还有这么个逻辑右移符号,以为就是普通的算术右移>>,有点误人子弟了。但是 java 把逻辑右移做成这种效果是想做成循环逻辑右移吗?
jwk345
2015 年 10 月 13 日
firemiles
2015 年 10 月 16 日
@jamesxu 高级语言用底层语言特性真是坑,用移位操作还是 c 比较清楚简单。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/227519

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX