为什么 javascript 按位和二进制数增加二进制字符串的长度

why does javascript bitwise & on binary numbers increases length of binary string

在下面的代码中,我的理解是 & 应该给出一个结果二进制字符串,其中每个字符串上的每个相应数字都是 1,但是我得到的结果是:“98435”,这是我所期望的是:“101011”。我的误解在哪里?我怎样才能实现我想要做的事情?

const bool = "101011";
const bool2 = "111011";
const and = bool & bool2;
console.log("bool: "+bool+", bool2: "+bool2+", &: "+and);

Javascript,像大多数语言一样,假设人类在代码中使用基数 10

尽管您的代码使用了 STRINGS

当您使用任何数学运算符(+ 除外)时,Javascript 试图表现得很好,并从字符串中生成一个数字 - 但是,它是一个 BASE 10 数字(除非第一个数字在字符串中是 0,其余数字是八进制(0 到 7),在这种情况下,该数字被认为是 BASE 8)

所以字符串 101011 "coerced" 是数字 101011 = 11000101010010011 而 111011 变成 111011 = 11011000110100011

11000101010010011 (binary) &  
11011000110100011 (binary)  
-----------------
11000000010000011 (binary) = 98435 (decimal)

但是,很容易修复:

const bool = "101011";
const bool2 = "111011";
const and = (parseInt(bool,2) & parseInt(bool2,2)).toString(2);
console.log("bool: "+bool+", bool2: "+bool2+", &: "+and);