如何使用JavaScript';s位操作处理非(~)操作?
在JavaScript中执行以下代码行总是会产生意外的结果,对此我没有任何线索。 这是我执行NOT(反转)操作的方式: 2=如何使用JavaScript';s位操作处理非(~)操作?,javascript,bitwise-operators,Javascript,Bitwise Operators,在JavaScript中执行以下代码行总是会产生意外的结果,对此我没有任何线索。 这是我执行NOT(反转)操作的方式: 2=0010 (~2)=1101,十进制为13。但是在JavaScript中执行完全相同的操作会输出值-3。有人能解释为什么会这样吗 <body> <p id="demo"></p> <script> document.getElementById("demo").innerHTML = ~ 2;
0010
(~2)=1101
,十进制为13
。但是在JavaScript中执行完全相同的操作会输出值-3
。有人能解释为什么会这样吗
<body>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = ~ 2;
</script>
</body>
document.getElementById(“demo”).innerHTML=~2;
结果:
-3
一元运算符将表达式移到其右侧,对其执行此小算法(其中N是波浪线右侧的表达式):-(N+1)
例如~2产生-3JavaScript使用整数值表示法。它还对有符号的32位整数执行所有按位操作(必要时转换参数)。因此表达式~2
不会导致1101
;而是
1111 1111 1111 1111 1111 1111 1111 1101
正好是-3的两个补码表示。(最左边的位为1表示负数。)
咨询更多信息
另外,如果你真的想得到13的结果,你可以屏蔽掉除低4位以外的所有位:
(~2)&0xF)
,因为JS使用32位有符号整数而不是4位无符号整数。实际上这是一个很好的类比,但是您应该这样命名,不要让它看起来像是实际执行的操作/算法-因为它没有解释,例如,为什么它只适用于N<2**31,并且它截断了浮点数。