为什么 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);
在下面的代码中,我的理解是 & 应该给出一个结果二进制字符串,其中每个字符串上的每个相应数字都是 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);