Logiikka JA. Asettaa kunkin bitin arvoon 1, jos molemmat bitit ovat 1
Logiikka TAI. Asettaa jokaisen bitin arvoon 1, jos toinen kahdesta bitistä on 1
Logiikka XOR. Asettaa jokaisen bitin arvoon 1, jos vain toinen kahdesta bitistä on 1
Logiikka EI. Kääntää kaikki bitit ylösalaisin
Nollatäyttö vasen siirto. Siirtyy vasemmalle työntämällä nollia sisään oikealta ja antaa vasemmanpuoleisimpien bittien pudota
Allekirjoitettu oikea vaihto. Vaihtaa oikealle työntämällä vasemmanpuoleisimman bitin kopiot sisään vasemmalta ja päästää oikeanpuoleisimman bitin pudota
Nollatäyttö oikealle. Vaihtaa oikealle työntämällä nollia sisään vasemmalta ja antaa oikeanpuoleisimpien bittien pudota
| 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 tallentaa numerot 64-bittisinä liukulukuina, mutta kaikki bittikohtaisesti toiminnot suoritetaan 32-bittisille binääriluvuille.
Ennen bittikohtaisen toiminnon suorittamista JavaScript muuntaa luvut 32-bittisiksi etumerkillisiä kokonaislukuja.
Kun bittikohtainen toiminto on suoritettu, tulos muunnetaan takaisin 64-bittiseksi JavaScriptiksi numeroita.
Yllä olevissa esimerkeissä käytetään 4-bittisiä etumerkittömiä binäärilukuja. Tästä syystä ~ 5 palauttaa 10.
Koska JavaScript käyttää 32 bitin etumerkillisiä kokonaislukuja, se ei palauta 10. Se palauttaa -6.
00000000000000000000000000000101 (5)
11111111111111111111111111111010 (~5=-6)
Etumerkillinen kokonaisluku käyttää vasenta bittiä miinusmerkkinä.
Kun bittikohtainen JA suoritetaan bittiparille, se palauttaa 1, jos molemmat bitit ovat 1.
0
0
0
1
0000
0001
0010
0100
Kun bittikohtainen TAI suoritetaan bittiparille, se palauttaa arvon 1, jos yksi biteistä on 1:
0
1
1
1
1111
1111
1111
1111
Kun bittikohtainen XOR suoritetaan bittiparille, se palauttaa arvon 1, jos bitit ovat erilaisia:
0
1
1
0
1111
1110
1101
1011
Bittikohtainen AND palauttaa arvon 1 vain, jos molemmat bitit ovat 1:
00000000000000000000000000000101
00000000000000000000000000000001
00000000000000000000000000000001 (1)
let x = 5 & 1;Kokeile itse →
<!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>
Bittikohtainen TAI palauttaa arvon 1, jos yksi biteistä on 1:
00000000000000000000000000000101
00000000000000000000000000000001
00000000000000000000000000000101 (5)
let x = 5 | 1;Kokeile itse →
<!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>
Bittikohtainen XOR palauttaa arvon 1, jos bitit ovat erilaisia:
00000000000000000000000000000101
00000000000000000000000000000001
000000000000000000000000000000100 (4)
let x = 5 ^ 1;Kokeile itse →
<!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;Kokeile itse →
<!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>
Tämä on nollatäytön siirto vasemmalle. Yksi tai useampi nollabitti työnnetään sisään oikealta, ja vasemmanpuoleiset palat putoavat:
00000000000000000000000000000101
00000000000000000000000000001010 (10)
let x = 5 << 1;Kokeile itse →
<!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>
Tämä on merkki, joka säilyttää oikean siirtymän. Vasemmanpuoleisen bitin kopiot työnnetään sisään vasemmalta, ja oikeanpuoleisimmat palat putoavat:
11111111111111111111111111111011
11111111111111111111111111111101 (-3)
let x = -5 >> 1;Kokeile itse →
<!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>
Tämä on nollatäyttö oikealle. Yksi tai useampi nollabitti työnnetään sisään vasemmalta, ja oikeanpuoleiset palat putoavat:
00000000000000000000000000000101
00000000000000000000000000000010 (2)
let x = 5 >>> 1;Kokeile itse →
<!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ääriluvut, joissa on vain yksi bittijoukko, on helppo ymmärtää:
1
2
4
8
16
32
64
Muutaman bitin lisääminen paljastaa binäärikuvion:
5 (4 + 1)
13 (8 + 4 + 1)
45 (32 + 8 + 4 + 1)
JavaScript-binääriluvut tallennetaan kahden komplementtimuodossa.
Tämä tarkoittaa, että negatiivinen luku on luvun plus 1 bittikohtainen EI:
5
-5
6
-6
40
-40
Maailmassa on vain 10 tyyppiä ihmisiä: niitä, jotka ymmärtävät binääriä, ja niitä, jotka eivät ymmärrä.
function dec2bin(dec){
return (dec >>> 0).toString(2);
}Kokeile itse →
<!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);
}Kokeile itse →
<!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>