Heim  >  Artikel  >  Web-Frontend  >  Detaillierte Erklärung des JS-Operators „!~“

Detaillierte Erklärung des JS-Operators „!~“

怪我咯
怪我咯Original
2017-07-04 15:22:003088Durchsuche

Dieser Artikel stellt hauptsächlich den JavascriptOperator"!~" im Detail vor. Nach mehreren Jahren der Arbeit sind es sogar die Grundlagen Wenn die Leute fragen, werden sie großzügig lachen.

Es ist fast Neujahr und ich habe endlich frei. Ich stöbere jeden Tag in verschiedenen technischen Artikeln und dieser Zustand ist großartig.

Ich habe am Nachmittag einen Artikel über js gelesen und der folgende Absatz erregte meine Aufmerksamkeit.

Der Code lautet wie folgt:

(function () {
    var names = [];
    return function (name) {
        addName(name);
    }
    function addName(name) {
        if (!~names.indexOf(name))//如果存在则不添加
            names.push(name);
        console.log(names);// ["linkFly"]
    }
}())('linkFly');

If (!~names.indexOf(name)) Was bedeutet der Operator „!~“ in if (!~names.indexOf(name )) bedeuten? Wenn Sie es nicht verstehen, beginnen Sie mit ~.

Der Test kann zeigen, dass der Ergebniswert dieses Muster aufweist – (X+1)

Suche , und in einigen Artikeln fehlt nur ein Satz: Negiere die Binärziffer

Wörtlich ausgedrückt wird es im achtstelligen Binärformat ausgedrückt: 3=00000011, dann ~3=11111100, es ist falsch, die obige Formel anzuwenden.
Die obige Erklärung ist noch zu abstrakt und nicht konkret. Tatsächlich erfordert dies die Kenntnis des Originalcodes, des Umkehrcodes und des Komplementcodes.

Originalcode
Das höchste Bit der Originalcodedarstellung ist das Vorzeichenbit. Dieses Bit ist 0 für positive Zahlen und 1 für negative Zahlen. Die restlichen Bits stellen den Absolutwert der Zahl dar.
Einserkomplementcode
Für eine vorzeichenbehaftete Zahl ist das Einserkomplement einer positiven Zahl dasselbe wie ihr Originalcode; das Einserkomplement einer negativen Zahl ist die bitweise Umkehrung jedes Bits des Originalcodes mit Ausnahme des Vorzeichens bisschen. Der Komplementcode wird häufig als Zwischenform bei der Suche nach dem Komplementcode verwendet.
Komplementcode
Der Komplementcode einer positiven Zahl ist derselbe wie ihr Originalcode und der Umkehrcode einer negativen Zahl wird durch Invertieren aller Bits ihres Originalcodes mit Ausnahme des Vorzeichenbits und Addieren von 1 erhalten bis zum letzten Bit, das heißt: Addiere 1 zum Komplement der Zahl. Zahlen in Computern werden im Allgemeinen in Zweierkomplementform dargestellt. Im Komplementcode wird (-128)D anstelle von (-0)D verwendet. Beachten Sie, dass (-128)D keinen entsprechenden Originalcode und Komplementärcode hat, (-128)D = (1000.0000)B.
Komplementoperation
Die Komplementoperation berücksichtigt das Vorzeichenbit nicht, sie wird durch Invertieren jedes Bits seines ursprünglichen Codes und Addieren von 1 zum letzten Bit erhalten. Das Komplement einer Zahl ist das Komplement ihres Gegenteils.

Nehmen Sie den Artikel des Autors als Beispiel und verstehen Sie, dass

~ bitweise Negation bedeutet. Negation bedeutet, dass, wenn es 00111 ist, 11000 wird (bitweise Negation)

Die Binärdatei Darstellung von 57 ist (1 Byte): 00111001
Die binäre Darstellung von (~57) nach bitweiser Invertierung: 11000110 Dies wird in Dezimalzahl ausgedrückt: -70
Dies ist eine negative Zahl und eine vorzeichenbehaftete Zahl, negative Zahlen sind dargestellt durch ihr Komplement in Computern: Komplement = bitweise Umkehrung des Vorzeichenbits und dann Addition von 1.
Also -70 (11000110) bitweise Umkehrung des Vorzeichenbits ist (10111001) plus 1 wird (10111010)
konvertiert in dezimal:-58
Also ~57=-58

Jetzt verstehe ich es endlich. Obwohl die zusammengefasste Formel schnell zu Ergebnissen führen kann, kann sie nicht erklären, warum wir als Techniker gerne in die Details eintauchen.

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung des JS-Operators „!~“. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn