为什么Javascript将数字视为两个补码

时间:2016-05-02 16:05:54

标签: javascript binary

以下解释为什么~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

1 个答案:

答案 0 :(得分:5)

因为这就是Javascript如何表示二进制中的负数。 Docs

  

所有位运算符的操作数都以二进制补码格式转换为带符号的32位整数。二进制补码格式意味着数字的负对应(例如5对-5)是所有数字的位被反转(按位数而不是数字,a.k.a。的数字补码)加1。