在JavaScript中执行以下代码行总是产生意想不到的结果,我没有任何线索。 这就是我执行NOT(反转)操作的方法:
2 = 0010
(~2) = 1101
,十进制为13
。但是在JavaScript中执行完全相同的操作会输出值-3
。任何人都可以解释原因吗?
<body>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = ~ 2;
</script>
</body>
结果: -3
答案 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