【问题标题】:why does javascript bitwise & on binary numbers increases length of binary string为什么javascript按位和二进制数会增加二进制字符串的长度
【发布时间】:2017-12-06 07:41:19
【问题描述】:

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

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

【问题讨论】:

  • 101,001 和 111,011(以 10 为底)非常正确地是 98435 以 10 为底 - 查看这些数字的二进制以了解原因...
  • (parseInt("101011",2) & parseInt("111011",2)).toString(2) 是您认为您的代码正在执行的操作 - javascript 不能那样工作
  • (43 & 59).toString(2) - 我认为你需要这样做
  • 我的误解在哪里?”。在认为“101011”是一个数字时,它是一个字符串。 ;-)
  • 值得注意的是,当在数学运算中使用该字符串时,该字符串被“强制”为 十进制 数字(+ 除外)

标签: javascript binary bitwise-operators


【解决方案1】:

与大多数语言一样,Javascript 假设人类在代码中使用以 10 为底的代码

您的代码虽然使用了 STRINGS

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

因此字符串 101011 被“强制”为数字 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);

【讨论】:

    猜你喜欢
    • 2014-12-15
    • 2012-08-27
    • 2012-12-10
    • 1970-01-01
    • 2021-02-24
    • 2017-03-09
    • 2020-08-02
    相关资源
    最近更新 更多