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
JavaScript 对整数值使用二进制补码表示.它还对带符号的32位整数执行所有按位运算(根据需要转换参数).所以表达式~2不会导致1101; 相反它
1111 1111 1111 1111 1111 1111 1111 1101
Run Code Online (Sandbox Code Playgroud)
这恰好是-3的二进制补码表示.(最左边的位为1表示负数.)
有关更多信息,请参阅按位运算符的文档.
PS如果你真的想要13的结果,你可以屏蔽除了低四位以外的所有结果:((~2) & 0xF).