Logika A. Nastaví každý bit na 1, pokud jsou oba bity 1
Logika NEBO. Nastaví každý bit na 1, pokud je jeden ze dvou bitů 1
Logika XOR. Nastaví každý bit na 1, pokud je pouze jeden ze dvou bitů 1
Logika NE. Invertuje všechny bity
Posun doleva s nulovou výplní. Posouvá doleva zatlačením nul zprava a nechá vypadnout bity nejvíce vlevo
Podepsaný pravý posun. Posouvá doprava zatlačením kopií bitu nejvíce vlevo dovnitř a ponechá bity nejvíce vpravo spadnout z
Posun doprava s nulovou výplní. Posouvá doprava zatlačením nul zleva a nechá vypadnout bity nejvíce vpravo
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 ukládá čísla jako 64bitová čísla s plovoucí desetinnou čárkou, ale všechna bitově operace se provádějí na 32bitových binárních číslech.
Před provedením bitové operace JavaScript převede čísla na 32 bitů celá čísla se znaménkem.
Po provedení bitové operace se výsledek převede zpět na 64bitový JavaScript čísla.
Výše uvedené příklady používají 4bitová binární čísla bez znaménka. Z tohoto důvodu ~ 5 vrátí 10.
Protože JavaScript používá 32bitová celá čísla se znaménkem, nevrátí 10. Vrátí -6.
0000000000000000000000000000101 (5)
1111111111111111111111111111010 (~5=-6)
Celé číslo se znaménkem používá bit zcela vlevo jako znaménko mínus.
Když je bitový AND proveden na páru bitů, vrátí 1, pokud jsou oba bity 1.
0
0
0
1
0000
0001
0010
0100
Když je bitový OR proveden na páru bitů, vrátí 1, pokud je jeden z bitů 1:
0
1
1
1
1111
1111
1111
1111
Když je bitový XOR proveden na páru bitů, vrátí 1, pokud se bity liší:
0
1
1
0
1111
1110
1101
1011
Bitový AND vrátí 1, pouze pokud jsou oba bity 1:
00000000000000000000000000000101
00000000000000000000000000000001
00000000000000000000000000000001 (1)
let x = 5 & 1;
Zkuste to sami →
<!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>
Bitový OR vrátí 1, pokud je jeden z bitů 1:
00000000000000000000000000000101
00000000000000000000000000000001
0000000000000000000000000000101 (5)
let x = 5 | 1;
Zkuste to sami →
<!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>
Bitový XOR vrátí 1, pokud se bity liší:
00000000000000000000000000000101
00000000000000000000000000000001
0000000000000000000000000000100 (4)
let x = 5 ^ 1;
Zkuste to sami →
<!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
1111111111111111111111111111010 (-6)
let x = ~5;
Zkuste to sami →
<!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>
Toto je posun doleva s nulovou výplní. Jeden nebo více nulových bitů je vložen zprava, a bity nejvíce vlevo odpadnou:
00000000000000000000000000000101
0000000000000000000000000001010 (10)
let x = 5 << 1;
Zkuste to sami →
<!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>
Toto je znak zachovávání pravého posunu. Kopie bitu zcela vlevo jsou posunuty dovnitř zleva a bity nejvíce vpravo odpadnou:
11111111111111111111111111111011
1111111111111111111111111111101 (-3)
let x = -5 >> 1;
Zkuste to sami →
<!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>
Toto je posun doprava s nulovou výplní. Jeden nebo více nulových bitů je vložen zleva, a bity nejvíce vpravo vypadnou:
00000000000000000000000000000101
0000000000000000000000000000010 (2)
let x = 5 >>> 1;
Zkuste to sami →
<!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ární čísla s pouze jednou bitovou sadou jsou snadno pochopitelná:
1
2
4
8
16
32
64
Nastavení několika dalších bitů odhalí binární vzor:
5 (4 + 1)
13 (8 + 4 + 1)
45 (32 + 8 + 4 + 1)
Binární čísla JavaScriptu jsou uložena ve formátu dvojkového doplňku.
To znamená, že záporné číslo je bitové NOT čísla plus 1:
5
-5
6
-6
40
-40
Na světě je pouze 10 typů lidí: ti, kteří rozumí binárnímu systému, a ti, kteří ne.
function dec2bin(dec){
return (dec >>> 0).toString(2);
}
Zkuste to sami →
<!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);
}
Zkuste to sami →
<!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>