2016-04-25 23 views
1

Diese Codezeile:bitweise OR unerwartetes Ergebnis

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

Ausgang:

-1039687680 (bin -111101111110000110000000000000) 

Nach 32-bit signed integer conversion erwarte ich:

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

Warum erhalte ich -1039687680 statt von -1107795968?

Antwort

1

Wie im Beitrag erwähnt, den Sie verlinkt haben, ist es im Zweierkomplementformat.

negativ 11000010000001111010000000000000 xor 1 plus 1 gleich

positive 11110111111000011000000000000000, 1039687680

schließlich -1039687680 gewonnen.