注意:以下所有二进制表示形式应从右至左阅读。我不确定为什么会这样思考,但实际上我不知道人们也从左到右代表二进制。令人困惑!
在MDN关于JavaScript的按位运算符的文章(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_NOT)中,该~
运算符是按位运算NOT
符。
在Wikipedia(https://en.wikipedia.org/wiki/Bitwise_operation#NOT)上,它说:“按位NOT或补码是对每一位执行逻辑取反的一元运算,形成给定二进制数的补码值。0变为1,而1变为0。”
现在,以二进制数5表示: 0101
如果~5
在浏览器控制台中键入,则-6
其二进制表示形式为1110
。我希望取反后0101
变成1010
,实际上是10(如果以最左边的数字为正负号,则为-2)。
我读过的所有关于JavaScript~
运算符的解释都表示,该运算符将数字评估为-(x + 1),但这并不能从逻辑上向我解释该运算符在“按位”级别上的操作。
基本上0101
成为1110
。
见证这一转变的中间步骤是什么?我看到前导位被翻转,从而改变了符号。但这就是我所能收集到的一切。
它确实确实执行了按位NOT运算,负数为2的补码。因此,值1010
是-6
。
二进制补码基本上在最左边的位起作用,表示负数,并被视为负值。所有其他1位都添加到该数字中。例如:
1010 => (-8 +0 +2 +0) => -6
1111 => (-8 +4 +2 +1) => -1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句