Logik OG. Sætter hver bit til 1, hvis begge bits er 1
Logik ELLER. Sætter hver bit til 1, hvis en af to bits er 1
Logik XOR. Sætter hver bit til 1, hvis kun én af to bits er 1
Logik IKKE. Inverterer alle bits
Nulfyld venstre skift. Skifter til venstre ved at trykke nuller ind fra højre og lader bits længst til venstre falde af
Signeret højre skift. Skifter til højre ved at skubbe kopier af bit længst til venstre ind fra venstre, og lad bit længst til højre falde af
Nulfyld højre skift. Skifter til højre ved at trykke nuller ind fra venstre, og lader bits længst til højre falde af
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 gemmer tal som 64-bit flydende kommatal, men alle bitvis operationer udføres på 32 bit binære tal.
Inden en bitvis handling udføres, konverterer JavaScript tal til 32 bit signerede heltal.
Efter den bitvise handling er udført, konverteres resultatet tilbage til 64 bit JavaScript tal.
Eksemplerne ovenfor bruger 4 bit binære tal uden fortegn. På grund af dette returnerer ~ 5 10.
Da JavaScript bruger 32 bit signerede heltal, vil det ikke returnere 10. Det vil returnere -6.
000000000000000000000000000000101 (5)
11111111111111111111111111111010 (~5=-6)
Et heltal med fortegn bruger bit længst til venstre som minustegnet.
Når en bitvis OG udføres på et par bit, returnerer det 1, hvis begge bits er 1.
0
0
0
1
0000
0001
0010
0100
Når en bitvis OR udføres på et par bit, returnerer det 1, hvis en af bitsene er 1:
0
1
1
1
1111
1111
1111
1111
Når en bitvis XOR udføres på et par bit, returnerer det 1, hvis bitsene er forskellige:
0
1
1
0
1111
1110
1101
1011
Bitvist OG returnerer kun 1, hvis begge bits er 1:
00000000000000000000000000000101
00000000000000000000000000000001
0000000000000000000000000000000001 (1)
let x = 5 & 1;
Prøv det selv →
<!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>
Bitwise OR returnerer 1, hvis en af bitsene er 1:
00000000000000000000000000000101
00000000000000000000000000000001
000000000000000000000000000000101 (5)
let x = 5 | 1;
Prøv det selv →
<!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>
Bitwise XOR returnerer 1, hvis bits er forskellige:
00000000000000000000000000000101
00000000000000000000000000000001
000000000000000000000000000000100 (4)
let x = 5 ^ 1;
Prøv det selv →
<!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
111111111111111111111111111111010 (-6)
let x = ~5;
Prøv det selv →
<!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>
Dette er et nul-fyld venstre skift. En eller flere nul bits skubbes ind fra højre, og de stykker længst til venstre falder af:
00000000000000000000000000000101
00000000000000000000000000001010 (10)
let x = 5 << 1;
Prøv det selv →
<!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>
Dette er et tegn, der bevarer højre skift. Kopier af bit længst til venstre skubbes ind fra venstre, og de længst til højre falder af:
11111111111111111111111111111011
111111111111111111111111111111101 (-3)
let x = -5 >> 1;
Prøv det selv →
<!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>
Dette er et nulfyld højreskift. En eller flere nul bits er skubbet ind fra venstre, og de længst til højre falder af:
00000000000000000000000000000101
000000000000000000000000000000010 (2)
let x = 5 >>> 1;
Prøv det selv →
<!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ære tal med kun et bitsæt er lette at forstå:
1
2
4
8
16
32
64
Indstilling af nogle flere bits afslører det binære mønster:
5 (4 + 1)
13 (8 + 4 + 1)
45 (32 + 8 + 4 + 1)
JavaScript binære tal gemmes i to's komplementformat.
Dette betyder, at et negativt tal er bitvis IKKE af tallet plus 1:
5
-5
6
-6
40
-40
Der er kun 10 typer mennesker i verden: dem, der forstår binært, og dem, der ikke gør.
function dec2bin(dec){
return (dec >>> 0).toString(2);
}
Prøv det selv →
<!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);
}
Prøv det selv →
<!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>