Logik OCH. Ställer in varje bit till 1 om båda bitarna är 1
Logik ELLER. Ställer in varje bit till 1 om en av två bitar är 1
Logisk XOR. Ställer in varje bit till 1 om bara en av två bitar är 1
Logik INTE. Inverterar alla bitar
Nollfyllning vänsterväxling. Skiftar vänster genom att trycka in nollor från höger och låter bitarna längst till vänster falla av
Signerad högerskifte. Skiftar åt höger genom att trycka in kopior av biten längst till vänster från vänster och låt bitarna längst till höger falla av
Nollfyllning högerväxling. Skiftar åt höger genom att trycka in nollor från vänster och låt bitarna längst till höger falla av
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 lagrar tal som 64-bitars flyttal, men alla bitvis operationer utförs på 32 bitars binära tal.
Innan en bitvis operation utförs konverterar JavaScript siffror till 32 bitar undertecknade heltal.
Efter att den bitvisa operationen har utförts konverteras resultatet tillbaka till 64 bitars JavaScript tal.
Exemplen ovan använder 4 bitar osignerade binära tal. På grund av detta returnerar ~ 5 10.
Eftersom JavaScript använder 32 bitars signerade heltal, kommer det inte att returnera 10. Det kommer att returnera -6.
000000000000000000000000000000101 (5)
111111111111111111111111111111010 (~5=-6)
Ett heltal med tecken använder biten längst till vänster som minustecken.
När en bitvis OCH utförs på ett par bitar, returnerar det 1 om båda bitarna är 1.
0
0
0
1
0000
0001
0010
0100
När ett bitvis ELLER utförs på ett par bitar, returnerar det 1 om en av bitarna är 1:
0
1
1
1
1111
1111
1111
1111
När en bitvis XOR utförs på ett par bitar, returnerar den 1 om bitarna är olika:
0
1
1
0
1111
1110
1101
1011
Bitvis OCH returnerar endast 1 om båda bitarna är 1:
00000000000000000000000000000101
00000000000000000000000000000001
00000000000000000000000000000000001 (1)
let x = 5 & 1;
Prova själv →
<!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>
Bitvis ELLER returnerar 1 om en av bitarna är 1:
00000000000000000000000000000101
00000000000000000000000000000001
000000000000000000000000000000101 (5)
let x = 5 | 1;
Prova själv →
<!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>
Bitvis XOR returnerar 1 om bitarna är olika:
00000000000000000000000000000101
00000000000000000000000000000001
000000000000000000000000000000100 (4)
let x = 5 ^ 1;
Prova själv →
<!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;
Prova själv →
<!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>
Detta är ett nollfyllningsvänsterskifte. En eller flera nollbitar trycks in från höger, och bitarna längst till vänster faller av:
00000000000000000000000000000101
00000000000000000000000000001010 (10)
let x = 5 << 1;
Prova själv →
<!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>
Detta är en skylt som bevarar högerförskjutning. Kopior av biten längst till vänster trycks in från vänster, och bitarna längst till höger faller av:
11111111111111111111111111111011
111111111111111111111111111111101 (-3)
let x = -5 >> 1;
Prova själv →
<!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>
Detta är en nollfyllning åt höger. En eller flera nollbitar trycks in från vänster, och bitarna längst till höger faller av:
00000000000000000000000000000101
0000000000000000000000000000000010 (2)
let x = 5 >>> 1;
Prova själv →
<!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ära tal med bara en bituppsättning är lätta att förstå:
1
2
4
8
16
32
64
Att ställa in ytterligare några bitar avslöjar det binära mönstret:
5 (4 + 1)
13 (8 + 4 + 1)
45 (32 + 8 + 4 + 1)
Binära JavaScript-tal lagras i tvås komplementformat.
Detta betyder att ett negativt tal är bitvis INTE av talet plus 1:
5
-5
6
-6
40
-40
Det finns bara 10 typer av människor i världen: de som förstår binärt och de som inte gör det.
function dec2bin(dec){
return (dec >>> 0).toString(2);
}
Prova själv →
<!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);
}
Prova själv →
<!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>