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

Jaf*_*017 2 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>
Run Code Online (Sandbox Code Playgroud)

结果: -3

Ted*_*opp 6

JavaScript 对整数值使用二进制补码表示.它还对带符号的32位整数执行所有按位运算(根据需要转换参数).所以表达式~2不会导致1101; 相反它

1111 1111 1111 1111 1111 1111 1111 1101
Run Code Online (Sandbox Code Playgroud)

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

有关更多信息,请参阅按位运算符的文档.

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