Logik UND. Setzt jedes Bit auf 1, wenn beide Bits 1 sind
Logik ODER. Setzt jedes Bit auf 1, wenn eines von zwei Bits 1 ist
Logisches XOR. Setzt jedes Bit auf 1, wenn nur eines von zwei Bits 1 ist
Logik NICHT. Invertiert alle Bits
Linksverschiebung mit Nullfüllung. Verschiebt sich nach links, indem von rechts Nullen eingeschoben werden und die Bits ganz links wegfallen
Rechtsverschiebung signiert. Verschiebt sich nach rechts, indem Kopien des ganz linken Bits von links hineingeschoben werden und die ganz rechten Bits durchgelassen werden runterfallen
Nullfüllung nach rechts verschieben. Verschiebt sich nach rechts, indem Nullen von links eingeschoben werden, und lässt die Bits ganz rechts wegfallen
Operation | Result | Same as | Result |
---|---|---|---|
5 & 1 | 1 | 0101 & 0001 | 0001 |
5 | 1 | 5 | 0101 | 0001 | 0101 |
~ 5 | 10 | ~0101 | 1010 |
5 << 1 | 10 | 0101 << 1 | 1010 |
5 ^ 1 | 4 | 0101 ^ 0001 | 0100 |
5 >> 1 | 2 | 0101 >> 1 | 0010 |
5 >>> 1 | 2 | 0101 >>> 1 | 0010 |
JavaScript speichert Zahlen als 64-Bit-Gleitkommazahlen, jedoch alle bitweise Operationen werden mit 32-Bit-Binärzahlen durchgeführt.
Bevor eine bitweise Operation ausgeführt wird, konvertiert JavaScript Zahlen in 32 Bit ganze Zahlen mit Vorzeichen.
Nachdem die bitweise Operation ausgeführt wurde, wird das Ergebnis zurück in 64-Bit-JavaScript konvertiert Zahlen.
In den obigen Beispielen werden vorzeichenlose 4-Bit-Binärzahlen verwendet. Aus diesem Grund gibt ~ 5 10 zurück.
Da JavaScript 32-Bit-Ganzzahlen mit Vorzeichen verwendet, wird nicht 10 zurückgegeben, sondern -6.
00000000000000000000000000000101 (5)
11111111111111111111111111111010 (~5=-6)
Eine Ganzzahl mit Vorzeichen verwendet das Bit ganz links als Minuszeichen.
Wenn ein bitweises UND für ein Bitpaar ausgeführt wird, wird 1 zurückgegeben, wenn beide Bits 1 sind.
0
0
0
1
0000
0001
0010
0100
Wenn ein bitweises ODER für ein Bitpaar ausgeführt wird, wird 1 zurückgegeben, wenn eines der Bits 1 ist:
0
1
1
1
1111
1111
1111
1111
Wenn ein bitweises XOR für ein Bitpaar durchgeführt wird, wird 1 zurückgegeben, wenn die Bits unterschiedlich sind:
0
1
1
0
1111
1110
1101
1011
Bitweises UND gibt nur dann 1 zurück, wenn beide Bits 1 sind:
00000000000000000000000000000101
00000000000000000000000000000001
00000000000000000000000000000001 (1)
let x = 5 & 1;
Probieren Sie es selbst aus →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Bitwise AND</h1>
<h2>The & Operator</h2>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = 5 & 1;
</script>
</body>
</html>
Bitweises ODER gibt 1 zurück, wenn eines der Bits 1 ist:
00000000000000000000000000000101
00000000000000000000000000000001
00000000000000000000000000000101 (5)
let x = 5 | 1;
Probieren Sie es selbst aus →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Bitwise OR</h1>
<h2>The | Operator</h2>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = 5 | 1;
</script>
</body>
</html>
Bitweises XOR gibt 1 zurück, wenn die Bits unterschiedlich sind:
00000000000000000000000000000101
00000000000000000000000000000001
00000000000000000000000000000100 (4)
let x = 5 ^ 1;
Probieren Sie es selbst aus →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Bitwise XOR</h1>
<h2>The ^ Operator</h2>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = 5 ^ 1;
</script>
</body>
</html>
00000000000000000000000000000101
11111111111111111111111111111010 (-6)
let x = ~5;
Probieren Sie es selbst aus →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Bitwise NOT</h1>
<h2>The ~ Operator</h2>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = ~ 5;
</script>
</body>
</html>
Dies ist eine Linksverschiebung mit Nullfüllung. Ein oder mehrere Nullbits werden von rechts eingeschoben, und die ganz linken Bits fallen ab:
00000000000000000000000000000101
00000000000000000000000000001010 (10)
let x = 5 << 1;
Probieren Sie es selbst aus →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Bitwise Left</h1>
<h2>The << Operator</h2>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = 5 << 1;
</script>
</body>
</html>
Dies ist ein Zeichen, dass die Rechtsverschiebung erhalten bleibt. Kopien des Bits ganz links werden gepusht von links hinein, und die Bits ganz rechts fallen ab:
11111111111111111111111111111011
11111111111111111111111111111101 (-3)
let x = -5 >> 1;
Probieren Sie es selbst aus →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Signed Bitwise Right</h1>
<h2>The >> Operator</h2>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = -5 >> 1;
</script>
</body>
</html>
Dies ist eine Rechtsverschiebung mit Nullfüllung. Ein oder mehrere Nullbits werden von links eingeschoben, und die Bits ganz rechts fallen ab:
00000000000000000000000000000101
00000000000000000000000000000010 (2)
let x = 5 >>> 1;
Probieren Sie es selbst aus →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Unsigned Bitwise Right</h1>
<h2>The >>> Operator</h2>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = 5 >>> 1;
</script>
</body>
</html>
Binärzahlen mit nur einem gesetzten Bit sind leicht zu verstehen:
1
2
4
8
16
32
64
Das Setzen einiger weiterer Bits zeigt das binäre Muster:
5 (4 + 1)
13 (8 + 4 + 1)
45 (32 + 8 + 4 + 1)
JavaScript-Binärzahlen werden im Zweierkomplementformat gespeichert.
Das bedeutet, dass eine negative Zahl das bitweise NICHT der Zahl plus 1 ist:
5
-5
6
-6
40
-40
Es gibt nur 10 Arten von Menschen auf der Welt: diejenigen, die Binärsystem verstehen, und diejenigen, die es nicht verstehen.
function dec2bin(dec){
return (dec >>> 0).toString(2);
}
Probieren Sie es selbst aus →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Convert Decimal to Binary</h1>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = dec2bin(-5);
function dec2bin(dec){
return (dec >>> 0).toString(2);
}
</script>
</body>
</html>
function bin2dec(bin){
return parseInt(bin, 2).toString(10);
}
Probieren Sie es selbst aus →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Convert Binary to Decimal</h2>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = bin2dec(101);
function bin2dec(bin){
return parseInt(bin, 2).toString(10);
}
</script>
</body>
</html>