为了账号安全,请及时绑定邮箱和手机立即绑定

求教JAVA LONG和INT运算结果为什么不一样

求教JAVA LONG和INT运算结果为什么不一样

花儿对我笑_ 2017-08-22 19:20:12
这是为什么呢
查看完整描述

4 回答

?
胜利女神在微笑

TA贡献67条经验 获得超59个赞

望采纳

查看完整回答
1 反对 回复 2017-08-23
?
胜利女神在微笑

TA贡献67条经验 获得超59个赞

是这样的,首先你要明白他这个位移运算是将10进制转换成2进制,然后进行位移,最后转成10进制

1755转化成2进制是11011011011,long是64位的不够补零 ....0000 0000 0000 0000 0000 0110 1101 1011,long右移40位在64的范围内,所以左边补40个零,右边相应减去40位,最后肯定是...0000 0000 0000 0000 0000,64个0,转换成10进制也是0

int是32位的右移40位,超出了int本身的范围是不起作用的,40-32=8,相当于右移8位...0000 0000 0110转换为10进制刚好是6

查看完整回答
1 反对 回复 2017-08-23
?
玖墨悬

TA贡献3条经验 获得超0个赞

不好意思,上面回答中,不是错了,而是它只移了8位

查看完整回答
反对 回复 2017-08-22
?
玖墨悬

TA贡献3条经验 获得超0个赞

java中Long占8个字节,也就是64位,而1755所占11位有效位,其余都为0,当你右移40位时,那么就会将其右移位全部由0补齐,所以为0,但是int为4个字节,也就是32位,结果就会出错。

查看完整回答
反对 回复 2017-08-22
  • 4 回答
  • 0 关注
  • 3134 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信