在 JavaScript 中执行以下代码行总是会产生意想不到的结果,我对此一无所知。 这就是我执行 NOT(反转)操作的方式:
2 = 0010
(~ 2) = 1101
,即十进制的 13
。但是在 JavaScript 中执行完全相同的操作会输出值 -3
。谁能解释一下为什么会这样?
<body>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = ~ 2;
</script>
</body>
结果: -3
最佳答案
JavaScript 使用 two's complement整数值的表示。它还对带符号的 32 位整数执行所有按位运算(根据需要转换参数)。所以表达式 ~2
不会导致 1101
;相反,它是
1111 1111 1111 1111 1111 1111 1111 1101
恰好是 -3 的补码表示。 (最左边的位为1表示负数。)
咨询the docs on bitwise operators了解更多信息。
附言如果你真的想要 13 的结果,你可以屏蔽除低四位以外的所有位:((~2) & 0xF)
。
关于javascript - JavaScript 按位运算如何处理 NOT (~) 运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44097751/