JavaScript中两个26位二进制数按位与运算结果为0的原因是什么
问题原因
- 第一个也是最核心的错误:你没有指定二进制字面量标识
JS 中直接书写的数字默认会被解析为十进制值,如果你要声明二进制数,必须在数值前添加0b前缀。你代码里的a、b都被当成了超大的十进制整数参与运算,和你预期的二进制值完全不符,自然按位与的结果和预期不一致。
额外说明:如果数字开头带多余的0,在非严格模式的老旧运行环境中还会被错误解析为八进制数,进一步偏离预期值。 - 不是有符号数的问题
你使用的26位二进制数最高位是第25位(从0开始计数),远低于JS按位运算默认采用的32位有符号整数的符号位(第31位),不会触发符号位判定逻辑,你的相关猜测不成立。
正确实现
给二进制常量加上0b前缀即可得到你预期的结果:
const a = 0b00000100000001000001000100; const b = 0b11111100000000000000000000; console.log(a & b); // 输出1048576,对应二进制就是你预期的100000000000000000000
如果后续需要处理超过32位的二进制数按位运算,建议使用BigInt类型避免溢出,只需要给字面量末尾加n后缀即可:
const a = 0b00000100000001000001000100n; const b = 0b11111100000000000000000000n; console.log(a & b); // 输出1048576n
内容的提问来源于stack exchange,提问作者Vagrant Coder
相关产品推荐
相关产品推荐

