猿问

按位或取值为负值

4294967295 | 1 //-1

4294967295 二进制是 11111111111111111111111111111111 32位

1 是 00000000000000000000000000000001

那么按位或的结果应该还是 11111111111111111111111111111111

转化十进制也就是 4294967295

可结果就是 -1

哪位大佬解释下


汪汪一只猫
浏览 444回答 1
1回答

料青山看我应如是

首先,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
我要回答