Der Neujahrsurlaub kommt bald und ich habe endlich Freizeit. Ich besuche jeden Tag verschiedene technische Artikel, und das ist in einem großartigen Zustand.
Ich habe am Nachmittag einen Artikel über JS gelesen, und es gibt einen solchen Absatz, der meine Aufmerksamkeit erregt hat.
Die Codekopie lautet wie folgt:
(function () {
var names = [];
Rückgabefunktion (Name) {
addname (name);
}
Funktion addname (name) {
if (! ~ names.indexof (name)) // Wenn es existiert, fügen Sie nicht hinzu
names.push (name);
Console.log (Namen); // ["Linkfly"]
}
} ()) ('linkfly');
Was bedeutet der Operator? Wenn Sie nicht verstehen, beginnen Sie zuerst mit ~.
Tests können zeigen, dass der Ergebniswert diese Regel hat - (x+1)
Nach der Suche verlieren einige Artikel nur einen Satz: Drehen Sie ihn durch binäres Stück invertiert
Aus der wörtlichen Bedeutung verwenden wir hier eine achtstellige binäre Darstellung: 3 = 00000011, dann ~ 3 = 11111100, die obige Formel ist falsch.
Die obige Erklärung ist immer noch zu abstrakt und nicht spezifisch. Tatsächlich beinhaltet dies die Kenntnis von Originalcode, Reverse -Code und Komplementcode.
Ursprünglicher Code
Das höchste Bit der ursprünglichen Code -Darstellung ist das Vorzeichenbit, das 0 ist, um eine positive Zahl und 1 anzugeben, um eine negative Zahl anzuzeigen. Die verbleibenden Bits repräsentieren den absoluten Wert der Zahl.
Inverser Code
Für eine signierte Zahl entspricht der inverse Code einer positiven Zahl wie der ursprüngliche Code. Der inverse Code einer negativen Zahl ist das Bit -Inverse der Bits mit Ausnahme des Vorzeichenbits. Der inverse Code wird häufig als Zwischenform verwendet, um Komplementcode zu finden.
Ergänzen
Die Ergänzung einer positiven Zahl entspricht ihrem ursprünglichen Code und dem inversen Code. Die Ergänzung einer negativen Zahl besteht darin, den ursprünglichen Code mit Ausnahme des Vorzeichenbits umzukehren und 1 zum letzten Bit hinzuzufügen, dh 1 zur Ergänzung der Zahl hinzuzufügen. Zahlen in Computern werden im Allgemeinen in Komplementform ausgedrückt. Im Komplementcode wird (-128) d anstelle von (-0) d verwendet. Hinweis: (-128) D hat nicht den entsprechenden Originalcode und den inversen Code (-128) d = (1000.000) b.
Ergänzende Operationen finden
Die Komplementoperation berücksichtigt nicht die Zeichenbits, sondern um die ursprünglichen Bits ihres ursprünglichen Codes und fügt 1 zum letzten Bit hinzu. Die Ergänzung einer Zahl ist die Ergänzung der entgegengesetzten Zahl.
Nehmen Sie das Artikel des Autors und verstehen Sie es
~ bedeutet eine bitweise Inversion. Wenn es 00111 ist, wird es 11000 (bitweise Inversion)
Die binäre Darstellung von 57 ist (1 Byte): 00111001
Binär nach bitweise Inversion (~ 57): 11000110 Dies wird als dezimal ausgedrückt: -70
Dies ist eine negative Zahl, eine signierte Zahl. Negative Zahlen sollten im Computer mit ihrem Komplementcode ausgedrückt werden: complement = Das Symbolbit ist invertiert und dann 1 hinzugefügt.
Daher ist es nach dem bitweisen Bitgewand, nachdem das Vorzeichenbit -70 (11000110) invertiert wurde, (10111001) und dann 1 hinzufügen, es ist (10111010).
Wechsel zum Dezimalsystem: -58
Daher ~ 57 = -58
Zu diesem Zeitpunkt habe ich es endlich herausgefunden. Obwohl die Zusammenfassungsformel schnell Ergebnisse zeichnen kann, kann sie nicht erklären, warum. Als Techniker studieren wir gerne und gehen tief in Details ein.
Zeit geben:
Das Fundament ist der Eckpfeiler aller oberen Ebenen. Wenn Sie sich dem Üben des Taoismus widmen, ist die Straße lang.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, jeder kann etwas gewinnen.