注意:以下所有二进制表示都应该从右到左读取。我不确定为什么我会这样想,但我其实并不知道人们也是从左到右代表二进制。混乱!JavaScript中为什么〜5 === -6?
对于JavaScript的按位运算符MDN的文章(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_NOT)它说~
运算符是按位运算符NOT
。
On Wikipedia(https://en.wikipedia.org/wiki/Bitwise_operation#NOT)它表示“按位NOT或补码是一个一元操作,对每个位执行逻辑否定,形成给定二进制值的1的补码,0为1的位和那些是1变成0.“
现在,走在二进制数5:0101
如果我在浏览器控制台输入~5
,我得到-6
其二进制表示1110
。我预计否定将0101
转换为1010
,实际上是10(如果最左边的数字是符号,则为-2)。
我读到的JavaScript的~
运算符的所有解释都表示它将数值计算为 - (x + 1),但这并不能从逻辑上向我解释该运算符在“按位”级别执行的操作。
基本上,0101
变成1110
。
见证这种转变的中间步骤是什么?我看到领先的位被翻转,从而改变了标志。但这就是我能够收集到的一切。
转到这里运行:http://stackoverflow.com/questions/31377474/why-does-bitwise-not-1-equal-2 –
这是相同的所有计算机使用2补码系统负数 – Soren
[〜x == = - (x + 1): - )](http://stackoverflow.com/questions/34349350/what-does-xy-represent-in-javascript).. – choz