JavaScript的按位操作如何处理NOT(〜)操作?

时间:2017-05-21 13:58:26

标签: javascript bitwise-operators

在JavaScript中执行以下代码行总是产生意想不到的结果,我没有任何线索。 这就是我执行NOT(反转)操作的方法:

2 = 0010

(~2) = 1101,十进制为13。但是在JavaScript中执行完全相同的操作会输出值-3。任何人都可以解释原因吗?

<body>
    <p id="demo"></p>
    <script>
    document.getElementById("demo").innerHTML = ~ 2;
    </script>
    </body>

结果: -3

2 个答案:

答案 0 :(得分:6)

JavaScript对整数值使用two's complement表示。它还对带符号的32位整数执行所有按位运算(根据需要转换参数)。因此,~2表达式不会导致1101;相反,它是

1111 1111 1111 1111 1111 1111 1111 1101

恰好是-3的二进制补码表示。 (最左边的位为1表示负数。)

详情请咨询the docs on bitwise operators

P.S。如果你真的想要13的结果,你可以屏蔽除了低四位之外的所有位:((~2) & 0xF)

答案 1 :(得分:0)

这是一个一元运算符,右边的表达式对它执行这个小算法(其中N是波浪号右边的表达式): - (N + 1)

例如~2产生-3