猿问

按位或取值为负值

4294967295|1//-1
4294967295二进制是1111111111111111111111111111111132位
1是00000000000000000000000000000001
那么按位或的结果应该还是11111111111111111111111111111111
转化十进制也就是4294967295
可结果就是-1
哪位大佬解释下
达令说
浏览 380回答 2
2回答

凤凰求蛊

首先,4294967295并不能用java的int型表示,java的int是32位但是你这个数字已经是2的32次幂,但是符号位还要占一个啊,所以java的int表示范围为-2147483648到2147483647,看不到你的代码不知道怎么实现的但是应该是强转了int。那么强转之后4294967295的二进制确实是32个1没错但是由于第一位为1所以表示负数,计算机中负数的值是除符号位之外按位取反再加一(就是补码咯),所以32个1变成了10000000000000000000000000000001,也就是-1,你再按位和1做或操作当然也是-1了。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答