Heim > Web-Frontend > js-Tutorial > Hauptteil

Ausführliche Erklärung von „&' und „|' in Javascript

高洛峰
Freigeben: 2017-02-03 13:44:03
Original
1282 Leute haben es durchsucht

1. Vorwort:

Bevor ich mit dem Artikel beginne, möchte ich Ihnen ein paar Fragen stellen:

var num1 = 1 & 0;
console.log(num1); // 0
var num2 = 'string' & 1;
console.log(num2); // 0
var num3 = true & 1;
console.log(num3); // 1
var num4 = undefined | false;
console.log(num4); // 0
var num5 = undefined | true;
console.log(num5); // 1
var num6 = 23 & 5;
console.log(num6); // 5
var num7 = 23 | 5;
console.log(num7); // 23
Nach dem Login kopieren

Haben alle die oben genannten Fragen richtig beantwortet? Wir haben zuvor „Ein kurzer Vortrag über „&&“ und „||“ in JavaScript zusammengefasst. „&&“ und „||“ sind Operatoren in logischen Operationsausdrücken. Was bedeutet also ein „&“ oder ein „|“? Was sind die Merkmale? Als nächstes werden wir die Geheimnisse nacheinander enthüllen.

Zuerst müssen wir verstehen, dass „&“ und „|“ bitweise Operatoren sind.

Bitweise Operatoren werden verwendet, um Werte auf der grundlegendsten Ebene zu bearbeiten, basierend auf den Bits, die den Wert im Speicher darstellen. Alle Werte in ECMAScript werden im 64-Bit-Format IEEE-754 gespeichert, Bitoperatoren arbeiten jedoch nicht direkt mit 64-Bit-Werten. Stattdessen wandelt es zunächst den 64-Bit-Wert in eine 32-Bit-Ganzzahl um, führt dann die Operation aus und wandelt schließlich das Ergebnis in 64 Bit um. Da das 64-Bit-Speicherformat transparent ist, sieht der gesamte Prozess für Entwickler so aus, als ob nur 32-Bit-Ganzzahlen vorhanden wären.

Bei vorzeichenbehafteten Ganzzahlen werden die ersten 31 der 32 Bits verwendet, um den Wert der Ganzzahl darzustellen. Bit 32 stellt das Vorzeichen des Werts dar: 0 steht für eine positive Zahl, 1 steht für eine negative Zahl. Dieses Bit, das das Vorzeichen darstellt, wird Vorzeichenbit genannt, und der Wert des Vorzeichenbits bestimmt das Format der anderen Bits. Wenn positive Zahlen im reinen Binärformat gespeichert werden, stellt jedes der 31 Bits eine Potenz von 2 dar. Das erste Bit (genannt Bit 0) repräsentiert 20, das zweite Bit repräsentiert 21 und so weiter. Nicht verwendete Bits werden durch 0 dargestellt und ignoriert. Beispielsweise ist die binäre Darstellung des Werts 18 0000 0000 0000 0000 0000 0000 0001 0010 oder prägnanter 10010. Dies sind 5 signifikante Bits, und diese 5 Bits selbst bestimmen den tatsächlichen Wert.

Negative Zahlen werden auch im Binärcode gespeichert, das verwendete Format ist jedoch das Zweierkomplement. Um das Zweierkomplement eines Werts zu berechnen, müssen Sie die folgenden drei Schritte durchlaufen:

(1) Finden Sie den Binärcode des Absolutwerts dieses Werts (z. B. wenn Sie das Zweierkomplement von benötigen). -18, finden Sie zuerst den Binärcode von 18) ;

(2) Finden Sie das Binärkomplement, dh ersetzen Sie 0 durch 1 und ersetzen Sie 1 durch 0; 1 zum erhaltenen binären Komplement.

Auf diese Weise erhält man die binäre Darstellung von -18, also 1111 1111 1111 1111 1111 1111 1110 1110.

......Wenn in ECMAScript Bitoperatoren auf Werte angewendet werden, findet im Hintergrund der folgende Konvertierungsprozess statt: Der 64-Bit-Wert wird in einen 32-Bit-Wert konvertiert, dann die Bitoperation wird ausgeführt und schließlich wird das 32-Bit-Ergebnis wieder in einen 64-Bit-Wert konvertiert. Auf diese Weise sieht es oberflächlich so aus, als würden Sie mit einem 32-Bit-Wert arbeiten, so wie binäre Operationen in anderen Sprachen auf ähnliche Weise ausgeführt werden. Dieser Konvertierungsprozess führt jedoch auch zu einem schwerwiegenden Nebeneffekt: Wenn Bitoperationen auf die speziellen NaN- und Infinity-Werte angewendet werden, werden diese beiden Werte als 0 behandelt.

Wenn Bitoperatoren auf nicht numerische Werte angewendet werden, wird die Funktion Number() verwendet, um den Wert in einen numerischen Wert umzuwandeln (wird automatisch abgeschlossen), und dann werden die Bitoperationen angewendet. Das Ergebnis ist ein numerischer Wert. ...(Abgefangen aus „Javascript Advanced Programming“)

2. „&“ (bitweises UND):

Der bitweise UND-Operator besteht aus einem kaufmännischen Und-Zeichen (&) bedeutet, dass es hat zwei Betreibernummern. Im Wesentlichen besteht die bitweise UND-Operation darin, jedes Bit zweier Werte auszurichten und eine UND-Operation für zwei Zahlen an derselben Position durchzuführen.

Bitweise UND-Operationsregeln: 1 wird nur zurückgegeben, wenn die entsprechenden Bits beider Werte 1 sind. Wenn eines der Bits 0 ist, ist das Ergebnis 0.

Ich habe vorher über zu viele theoretische Dinge gesprochen, aber ich denke, Theorie ist sehr notwendig. Als nächstes analysieren wir die Beispiele direkt!

Schauen wir uns zunächst Nummer1, Nummer2, Nummer3 und Nummer6 in der obigen Frage an. Wir versuchen, die obige Theorie zu kombinieren, um zu analysieren, warum das Endergebnis ausgegeben wird.

3. „|“ (bitweises ODER):
// num1是1和0进行“按位与”操作后的返回值。1的二进制码简写为1,0的二进制码简写为0,根据上面的规则,第二个操作符数为0,结果是0
var num1 = 1 & 0;
console.log(num1); // 0
// 第一个操作符数是字符串,按照前言里面的理论,对于非数值的操作符数,先使用Number()函数处理,结果返回NaN,NaN又会被当成0来处理。所以最终结果也是0
var num2 = 'string' & 1;
console.log(num2); // 0
// true是布尔类型值,同样使用Number()函数处理,处理后得到数值1,于是表达式就相当于“1 & 1” 进行位运算,当两个数值都为1的时候,结果返回1
var num3 = true & 1;
console.log(num3); // 1
// 23的二进制码是:...10111,5的二进制码是:...00101。然后每一位进行对齐处理,结合上面的规则,可以得出10111&00101的结果是:00101。00101就是5
var num6 = 23 & 5;
console.log(num6); // 5
// 再加个例子:24的二进制码为...11000,7的二进制码为...00111,相同位置的两个数执行AND操作,结果发现结果是...00000。所以最终结果是0,你算对了吗?
var add1 = 24 & 7;
console.log(add1); // 0
Nach dem Login kopieren

Der bitweise ODER-Operator wird durch ein vertikales Balkensymbol (|) dargestellt und hat auch zwei Operanden. Im Wesentlichen richtet die bitweise ODER-Operation auch jedes Bit der beiden Werte aus und führt eine ODER-Operation für die beiden Zahlen an derselben Position durch.

Bitweise ODER-Operationsregeln: Solange eines der entsprechenden Bits der beiden Werte 1 ist, wird 1 zurückgegeben, und 0 wird nur zurückgegeben, wenn beide Bits 0 sind.

Nehmen wir das Top-Beispiel und schauen es uns an!

// 第一个操作符数为undefined,第二个操作符数是false,均不是数值,所以都要先使用Number()函数处理,处理结果都是返回NaN,NaN又会被当成0处理,于是最终结果是0
var num4 = undefined | false;
console.log(num4); // 0
// 第一个操作符数相当于0,第二个操作符数相当于1,结合按位或的规则,最终结果是1
var num5 = undefined | true;
console.log(num5); // 1
// 23的二进制码是:...10111,5的二进制码是:...00101。然后每一位进行对齐处理,结合上面的规则,可以得出10111|00101的结果是:10111。10111就是23
var num7 = 23 | 5;
console.log(num7); // 23
// 再加个例子:24的二进制码为...11000,7的二进制码为...00111,相同位置的两个数执行AND操作,结果发现结果是...11111。所以最终结果是31,你算对了吗?
var add2 = 24 | 7;
console.log(add2); // 31
Nach dem Login kopieren


4. Andere:

Ich glaube, es wird einige Freunde geben, die nicht wissen, wie man den numerischen Wert in einen Standard-Binärwert umwandelt Gibt es eine schnelle Möglichkeit, den Wert in einen Standard-Binärcode umzuwandeln? Die Antwort ist ja.

Ich habe zufällig die Adresse eines Online-Konvertierungstools im Internet gefunden: Numerisch-Dezimal-Konvertierung (klicken Sie auf mich, um es anzuzeigen). (Natürlich können Sie auch andere Tools verwenden, die Sie finden. In jedem Fall ist das Erreichen des Effekts unser oberstes Ziel.)

Zum Schluss füge ich noch das reguläre Diagramm bei, das ich im Prozess der Binärkonvertierung per Handschrift zusammengefasst habe Sie können numerische Werte schnell in Binärcodes umwandeln, was sehr leistungsstark ist!

Ausführlichere Erklärungen zu „&“ und „|“ in Javascript finden Sie auf der chinesischen PHP-Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!