Javascript 按位OR不返回正确的值
考虑到javascriptJavascript 按位OR不返回正确的值,javascript,bit-manipulation,Javascript,Bit Manipulation,考虑到javascriptint精度精确到15个数字,为什么按位OR(|)返回1410065407,而在以下情况下它应该是==a和&b 设a=99999999;//10天 设b=99999999;//10天 设c=a | b; 设d=b | a; log({a,b,c,d}); //例2 设a2=99999999;//9d 设b2=99999999;//9d 设c2=a2 | b2; 设d2=b2 | a2; log({a2,b2,c2,d2}) […]考虑到javascript int精度精
int
精度精确到15个数字,为什么按位OR(|
)返回1410065407
,而在以下情况下它应该是==a和&b
设a=99999999;//10天
设b=99999999;//10天
设c=a | b;
设d=b | a;
log({a,b,c,d});
//例2
设a2=99999999;//9d
设b2=99999999;//9d
设c2=a2 | b2;
设d2=b2 | a2;
log({a2,b2,c2,d2})代码>
[…]考虑到javascript int精度精确到15个数字
不是数字而是32位
值9999999999高于整个32位范围,即4294967296(或2^32),因此发生的情况是,您正在将数字“转换”(钳制)为32位,这将在任何按位运算中发生:
console.log(9999999999>>0);
console.log(9999999999&0xffffffff);
log(9999999999999“15位”仅适用于浮点计算(即使是十进制也只是二进制算术之上的一个破碎的抽象层),而不是整数计算。