JavaScript(Node.js)中0xffffffff按位与运算结果异常的原因咨询
问题解释
首先明确两个核心规则:
- JavaScript的数字类型是64位双精度浮点数,能精确表示范围在
-(2^53 - 1)到2^53 - 1之间的整数。 - 所有位运算(包括
&)会先将操作数转换为32位有符号整数再计算。
赋值时的行为
const num = 0xffffffff中,十六进制的0xffffffff对应的十进制是4294967295,这个数在64位浮点数的精确表示范围内,所以变量num存储的就是这个无符号整数的值,直接输出时自然显示4294967295。
按位与运算的行为
当执行num & num时,JavaScript会先把num(值为4294967295)转换为32位有符号整数:
- 4294967295的二进制是32个1:
11111111 11111111 11111111 11111111 - 在32位有符号整数规则中,最高位是符号位,1代表负数。这个二进制数是-1的补码表示(补码规则下,-1的32位二进制就是全1)。
- 所以转换后的数值是-1,执行
-1 & -1的结果自然是-1。
内容的提问来源于stack exchange,提问作者y. bs
相关产品推荐
相关产品推荐

