Enthüllung der wahren Natur von Double Tiltern (~~) in JavaScript
Im Bereich JavaScript sticht der -Operator hervor mit seiner rätselhaften Funktionalität. Es ist allgemein bekannt, dass die einzelne Tilde (~) bitweises NICHT bedeutet, was uns zum Nachdenken bringt: Was bewirkt ihr Dublett ()?
Im Gegensatz zur Intuition, dass sie die bitweise Negation, den ~~-Operator, verdoppelt hat eine überraschende Wirkung. Er hat die Fähigkeit, den Dezimalteil einer Zahl zu kürzen und sie so effektiv auf die nächste ganze Zahl zu runden.
Hinter den Kulissen arbeitet der ~~-Operator, indem er seinen Operanden als vorzeichenbehaftete 32-Bit-Ganzzahl behandelt bitweise Operationen unabhängig vom tatsächlichen Typ des Operanden (Zahl, Zeichenfolge usw.). Dadurch wird der Bruchteil verworfen und das Ergebnis ist immer eine Zahl.
Genau genommen simuliert der ~~-Operator im Wesentlichen die folgende Funktion:
function truncate(x) { if(x < 0) return Math.ceil(x); else return Math.floor(x); }
Diese Operation gilt jedoch Nur wahr, wenn der Wert von x im Bereich von -(2^31) bis 2^31 - 1 (einschließlich) liegt. Außerhalb dieses Bereichs kann es zu einem Überlauf kommen, der zu unvorhersehbaren Ergebnissen führt.
~~ kann zwar nützlich sein, um String-Argumente schnell in Zahlen umzuwandeln, seine Einschränkungen (Möglichkeit eines Überlaufs und falsches Verhalten bei nicht ganzzahligen Werten) machen es jedoch möglich es ist für die numerische Manipulation weniger wünschenswert. Stattdessen ist es im Allgemeinen vorzuziehen, für diese Zwecke x oder Number(x) zu verwenden.
Doppelte Negation entschlüsseln
Das Verständnis des ~~-Operators als Negation einer Negation erfordert ein tieferer Einblick in die binäre Darstellung. Nehmen Sie als Beispiel die Zahl -43,2, dargestellt in vorzeichenbehafteter 32-Bit-Binärform (Zweierkomplement):
-43.2<sub>10</sub> = 11111111111111111111111111010101<sub>2</sub>
Das Invertieren aller Bits (bitweises NICHT) ergibt:
NOT -43<sub>10</sub> = 00000000000000000000000000101010<sub>2</sub> = 42<sub>10</sub>
Die erneute Anwendung der Negation führt zu:
NOT 42<sub>10</sub> = 11111111111111111111111111010101<sub>2</sub> = -43<sub>10</sub>
Dieses Endergebnis (-43) unterscheidet sich vom Ergebnis von Math.floor(-43.2), das -44 wäre. Dies liegt daran, dass ~~ Zahlen von Null weg aufrundet, im Gegensatz zu Math.floor, das abrundet.
Das obige ist der detaillierte Inhalt von## Was macht der Doppel-Tilde-Operator (~~) eigentlich in JavaScript?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!