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

按位或取值为负值

按位或取值为负值

达令说 2019-05-25 14:03:07
4294967295|1//-14294967295二进制是1111111111111111111111111111111132位1是00000000000000000000000000000001那么按位或的结果应该还是11111111111111111111111111111111转化十进制也就是4294967295可结果就是-1哪位大佬解释下
查看完整描述

2 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

首先,4294967295并不能用java的int型表示,java的int是32位但是你这个数字已经是2的32次幂,但是符号位还要占一个啊,所以java的int表示范围为-2147483648到2147483647,看不到你的代码不知道怎么实现的但是应该是强转了int。那么强转之后4294967295的二进制确实是32个1没错但是由于第一位为1所以表示负数,计算机中负数的值是除符号位之外按位取反再加一(就是补码咯),所以32个1变成了10000000000000000000000000000001,也就是-1,你再按位和1做或操作当然也是-1了。
                            
查看完整回答
反对 回复 2019-05-25
  • 2 回答
  • 0 关注
  • 379 浏览
慕课专栏
更多

添加回答

举报

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