gpt4 book ai didi

javascript - 按位或不返回正确的值

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:30:29 25 4
gpt4 key购买 nike

考虑到javascript int精度是精确到15位数字吗?

let a = 9999999999; // 10d
let b = 9999999999; // 10d
let c = a | b;
let d = b | a;

console.log({a,b,c,d});

// example 2

let a2 = 999999999; // 9d
let b2 = 999999999; // 9d
let c2 = a2 | b2;
let d2 = b2 | a2;

console.log({a2,b2,c2,d2});

最佳答案

[...] considering that javascript int precision is accurate to 15 numbers

不是数字,而是 32

值 9,999,999,999 高于完整的 32 位范围,即 4,294,967,296(或 2^32),所以发生的事情是您将数字“转换”(钳位)为 32 位,这将发生在任何按位的情况下操作:

console.log(9999999999>>0);
console.log(9999999999&0xffffffff);
console.log(9999999999<<0);
console.log(9999999999|9999999999);
// etc.

那么发生的情况是 1) 数字被限制在 32 位范围内,即在这种情况下为 1,410,065,407:

Full range would require 34-bits:
1001010100000010111110001111111111 -> 9,999,999,999

Actual result, max 32-bits:
--01010100000010111110001111111111 -> 1,410,065,407

然后 2) OR'ed 在一起,这将给出相同的结果,因为两个数字首先被限制。

在第二个示例中,数字 999,999,999 恰好在 32 位范围内,因此无需限制即可通过。

关于javascript - 按位或不返回正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47900464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com