Bitové operace JavaScriptu
Bitové operátory JavaScriptu
Operator | Name | Description |
---|---|---|
& | AND | Sets each bit to 1 if both bits are 1 |
| | OR | Sets each bit to 1 if one of two bits is 1 |
^ | XOR | Sets each bit to 1 if only one of two bits is 1 |
~ | NOT | Inverts all the bits |
<< | Zero fill left shift | Shifts left by pushing zeros in from the right and let the leftmost bits fall off |
>> | Signed right shift | Shifts right by pushing copies of the leftmost bit in from the left, and let the rightmost bits fall off |
>>> | Zero fill right shift | Shifts right by pushing zeros in from the left, and let the rightmost bits fall off |
Příklady
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 používá 32bitové bitové operandy
JavaScript ukládá čísla jako 64bitová čísla s plovoucí desetinnou čárkou, ale všechny bitové operace se provádějí na 32bitových binárních číslech.
Před provedením bitové operace JavaScript převede čísla na 32bitová celá čísla se znaménkem.
Po provedení bitové operace se výsledek převede zpět na 64bitová čísla JavaScriptu.
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.
Bitové AND
Když je bitový AND proveden na páru bitů, vrátí 1, pokud jsou oba bity 1.
Úkon | Výsledek |
---|---|
0 a 0 | 0 |
0 a 1 | 0 |
1 a 0 | 0 |
1 a 1 | 1 |
Úkon | Výsledek |
---|---|
1111 a 0000 | 0000 |
1111 a 0001 | 0001 |
1111 a 0010 | 0010 |
1111 a 0100 | 0100 |
Bitově NEBO
Když je bitový OR proveden na páru bitů, vrátí 1, pokud je jeden z bitů 1:
Úkon | Výsledek |
---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Úkon | Výsledek |
---|---|
1111 | 0000 | 1111 |
1111 | 0001 | 1111 |
1111 | 0010 | 1111 |
1111 | 0100 | 1111 |
Bitový XOR
Když se bitový XOR provede na páru bitů, vrátí 1, pokud se bity liší:
Úkon | Výsledek |
---|---|
0 ^ 0 | 0 |
0 ^ 1 | 1 |
1 ^ 0 | 1 |
1 ^ 1 | 0 |
Úkon | Výsledek |
---|---|
1111 ^ 0000 | 1111 |
1111 ^ 0001 | 1110 |
1111 ^ 0010 | 1101 |
1111 ^ 0100 | 1011 |
JavaScript bitově AND (&)
Bitový AND vrátí 1, pouze pokud jsou oba bity 1:
Desetinný | Binární |
---|---|
5 | 0000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 a 1 | 0000000000000000000000000000001 (1) |
Příklad
let x = 5 & 1;
JavaScript Bitově NEBO (|)
Bitový OR vrátí 1, pokud je jeden z bitů 1:
Desetinný | Binární |
---|---|
5 | 0000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 | 1 | 0000000000000000000000000000101 (5) |
Příklad
let x = 5 | 1;
JavaScript Bitwise XOR (^)
Bitový XOR vrátí 1, pokud se bity liší:
Desetinný | Binární |
---|---|
5 | 0000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 ^ 1 | 0000000000000000000000000000100 (4) |
Příklad
let x = 5 ^ 1;
JavaScript bitově NE (~)
Desetinný | Binární |
---|---|
5 | 0000000000000000000000000000101 |
~5 | 1111111111111111111111111111010 (-6) |
Příklad
let x = ~5;
JavaScript (nulová výplň) Bitový levý Shift (<<)
Toto je posun doleva s nulovou výplní. Jeden nebo více nulových bitů je zasunuto zprava a bity zcela vlevo odpadnou:
Desetinný | Binární |
---|---|
5 | 0000000000000000000000000000101 |
5 << 1 | 0000000000000000000000000001010 (10) |
Příklad
let x = 5 << 1;
JavaScript (Zachování znaménka) Bitový pravý Shift (>>)
Toto je znak zachovávání pravého posunu. Kopie bitu nejvíce vlevo se zasouvají zleva a bity nejvíce vpravo odpadnou:
Desetinný | Binární |
---|---|
-5 | 1111111111111111111111111111011 |
-5 >> 1 | 1111111111111111111111111111101 (-3) |
Příklad
let x = -5 >> 1;
JavaScript (nulová výplň) pravý Shift (>>>)
Toto je posun doprava s nulovou výplní. Jeden nebo více nulových bitů je vsunuto zleva a bity zcela vpravo odpadnou:
Desetinný | Binární |
---|---|
5 | 0000000000000000000000000000101 |
5 >>> 1 | 0000000000000000000000000000010 (2) |
Příklad
let x = 5 >>> 1;
Binární čísla
Binární čísla s pouze jednou bitovou sadou jsou snadno pochopitelná:
Binární reprezentace | Desetinná hodnota |
---|---|
00000000000000000000000000000001 | 1 |
0000000000000000000000000000010 | 2 |
0000000000000000000000000000100 | 4 |
0000000000000000000000000001000 | 8 |
0000000000000000000000000010000 | 16 |
0000000000000000000000000100000 | 32 |
0000000000000000000000001000000 | 64 |
Nastavení několika dalších bitů odhalí binární vzor:
Binární reprezentace | Desetinná hodnota |
---|---|
0000000000000000000000000000101 | 5 (4 + 1) |
0000000000000000000000000001101 | 13 (8 + 4 + 1) |
0000000000000000000000000101101 | 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:
Binární reprezentace | Desetinná hodnota |
---|---|
0000000000000000000000000000101 | 5 |
1111111111111111111111111111011 | -5 |
0000000000000000000000000000110 | 6 |
1111111111111111111111111111010 | -6 |
0000000000000000000000000101000 | 40 |
1111111111111111111111111011000 | -40 |
Převod desítkové soustavy na binární
Příklad
function dec2bin(dec){
return (dec >>> 0).toString(2);
}
Převod binárních na desítkové
Příklad
function bin2dec(bin){
return parseInt(bin, 2).toString(10);
}