4294967295 | 1 //-14294967295 二进制是 11111111111111111111111111111111 32位1 是 00000000000000000000000000000001那么按位或的结果应该还是 11111111111111111111111111111111转化十进制也就是 4294967295可结果就是 -1哪位大佬解释下
1 回答
料青山看我应如是
TA贡献1772条经验 获得超8个赞
首先,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
提交
取消