Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JavaScript';s位操作处理非(~)操作?_Javascript_Bitwise Operators - Fatal编程技术网

如何使用JavaScript';s位操作处理非(~)操作?

如何使用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;

在JavaScript中执行以下代码行总是会产生意外的结果,对此我没有任何线索。 这是我执行NOT(反转)操作的方式:

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产生-3

JavaScript使用整数值表示法。它还对有符号的32位整数执行所有按位操作(必要时转换参数)。因此表达式
~2
不会导致
1101
;而是

1111 1111 1111 1111 1111 1111 1111 1101
正好是-3的两个补码表示。(最左边的位为1表示负数。)

咨询更多信息


另外,如果你真的想得到13的结果,你可以屏蔽掉除低4位以外的所有位:
(~2)&0xF)

,因为JS使用32位有符号整数而不是4位无符号整数。实际上这是一个很好的类比,但是您应该这样命名,不要让它看起来像是实际执行的操作/算法-因为它没有解释,例如,为什么它只适用于N<2**31,并且它截断了浮点数。