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了。
添加回答
举报
0/150
提交
取消