Hinweis: Alle folgenden Binärdarstellungen sollten von rechts nach links gelesen werden. Ich bin mir nicht sicher, warum ich so über sie nachdenke, aber ich wusste eigentlich nicht, dass Menschen auch von links nach rechts binär vertreten sind. Verwirrend!Warum ist ~ 5 === -6 in JavaScript?
In MDN Artikel für JavaScript bitweise Operatoren (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_NOT) heißt es, dass der Operator ~
der bitweise Operator NOT
ist. Auf Wikipedia (https://en.wikipedia.org/wiki/Bitwise_operation#NOT) heißt es: "Das bitweise NOT, oder Komplement, ist eine unäre Operation, die logische Negation für jedes Bit ausführt und das Einerkomplement des gegebenen binären Wertes bildet. Bits, die 0 sind, werden 1, und Diejenigen, die 1 sind, werden 0. "
Nun nehmen Sie die Nummer 5 in binär: 0101
Wenn ich ~5
in meinem Browser-Konsole eingeben, erhalte ich -6
deren binäre Darstellung 1110
ist. Ich erwartete, dass die Negation 0101
in 1010
umwandelt, was tatsächlich 10 ist (oder -2, wenn die Ziffer ganz links als Vorzeichen genommen wird).
Alle Erklärungen, die ich von JavaScript's ~
Operator gelesen habe, sagt, dass es die Zahl zu - (x + 1) auswertet, aber das erklärt mir logisch nicht, was dieser Operator auf einer "bitweisen" Ebene macht.
Grundsätzlich 0101
wird 1110
.
Was sind die Zwischenschritte, um diese Transformation zu bezeugen? Ich sehe, wie das führende Bit umgedreht wird, wodurch sich das Vorzeichen ändert. Aber das ist alles, was ich sammeln kann.
hier gehen http://stackoverflow.com/questions/31377474/why-does-bitwise-not-1-equal-2 –
Es ist das gleiche in allen Computern, die ein 2-Komplement-System für negative Zahlen verwenden – Soren
[~ x == = - (x + 1): -)] (http://stackoverflow.com/questions/34349350/what-does-xy-represent-in-javascript) .. – choz