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

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

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

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

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

https://www.v2ex.com/t/227519

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

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

© 2021 V2EX