2016-04-25 95 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獲得。