2016-04-25 97 views
1

这行代码:位或意外的结果

console.log((90000000000000|0).toString()); 

输出:

-1039687680 (bin -111101111110000110000000000000) 

32-bit signed integer conversion,我想到:

/--discarded--\/---------significant----------\ 
10100011101101011000010000001111010000000000000 = 90000000000000 
           │ 
       11000010000001111010000000000000 OR 
       00000000000000000000000000000000 
       ================================ 
       11000010000001111010000000000000 = -1107795968 
      sign/\------significant bits-------/ 

为什么我得到-1039687680代替-1107795968

回答

1

正如您在链接中所提到的,它是以二进制补码格式。

负11000010000001111010000000000000 XOR 1加1等于

积极11110111111000011000000000000000,1039687680

终于-1039687680获得。