以下解释为什么~5
等于来自here的-6
:
5 = 0000 0101
翻转(~5)= 1111 1010
那么,哪个 号码是1111 1010代表什么?由于第一个数字是1,我们知道 它是一个负值。要找到哪个值,请执行
- (翻转(1111 1010)+ 1)= - (0000 0101 + 1) - (0000 0110)= -6
我想知道为什么Javascript将~5
的结果视为两个补码形式的数字?
我的困惑源于这样一个事实:如果我在控制台中写0b11111010
,它的评估值为250,而不是-6
答案 0 :(得分:5)
因为这就是Javascript如何表示二进制中的负数。 Docs:
所有位运算符的操作数都以二进制补码格式转换为带符号的32位整数。二进制补码格式意味着数字的负对应(例如5对-5)是所有数字的位被反转(按位数而不是数字,a.k.a。的数字补码)加1。