Operatory bitowe w JavaScript
- Poprzednia strona Rozpakuj JS
- Następna strona Wyrażenia regularne JS
Operatory bitowe w JavaScript
Operator | Nazwa | Opis |
---|---|---|
& | AND | Ustawienie każdego bitu na 1, jeśli oba z dwóch bitów wynoszą 1 |
| | OR | Ustawienie każdego bitu na 1, jeśli przynajmniej jeden z dwóch bitów wynosi 1 |
^ | XOR | Ustawienie każdego bitu na 1, jeśli tylko jeden z dwóch bitów wynosi 1 |
~ | NOT | Odwracanie wszystkich bitów |
<< | Przesuwanie w lewo z wypełnieniem zerami | Przesuwanie w lewo za pomocą wstawienia z prawej strony z odpadnięciem najlewego bitu. |
>> | Przesuwanie w prawo ze znakiem | Przesuwanie w prawo za pomocą wstawienia kopii najlewego bitu z lewej strony z odpadnięciem najprawiejszego bitu. |
>>> | Przesuwanie w prawo z wypełnieniem zerami | Przesuwanie w prawo za pomocą wstawienia z lewej strony z odpadnięciem najprawiejszego bitu. |
Przykład
Operacja | Wynik | jest równoważne | Wynik |
---|---|---|---|
5 & 1 | 1 | 0101 & 0001 | 0001 |
5 | 1 | 5 | 0101 | 0001 | 0101 |
5 ^ 1 | 4 | 0101 ^ 0001 | 0100 |
~ 5 | 10 | ~0101 | 1010 |
5 << 1 | 10 | 0101 << 1 | 1010 |
5 >> 1 | 2 | 0101 >> 1 | 0010 |
5 >>> 1 | 2 | 0101 >>> 1 | 0010 |
JavaScript używa 32-bitowych liczb bitowych
JavaScript przechowuje liczby jako 64-bitowe liczby zmiennoprzecinkowe, ale wszystkie operacje bitowe są wykonywane jako 32-bitowe liczby binarne.
Przed wykonaniem operacji bitowych JavaScript przekształci liczbę na 32-bitową liczbę całkowitą ze znakiem.
Po wykonaniu operacji bitowych wynik zostanie przekształcony na 64-bitową liczbę JavaScript.
Powyższy przykład używa 4-bitowych liczb binarnych bez znaku. Więc ~5 zwraca 10.
Ponieważ JavaScript używa 32-bitowych znakowanych liczb całkowitych, JavaScript zwróci -6.
00000000000000000000000000000101 (5)
11111111111111111111111111111010 (~5 = -6)
Znakowane liczby całkowite używają najwyższego bitu jako znaku.
Operacja bitowa AND
Gdy podczas operacji bitowej AND na parze cyfr liczba 1 zwraca 1.
Przykład jednostkowy:
Operacja | Wynik |
---|---|
0 & 0 | 0 |
0 & 1 | 0 |
1 & 0 | 0 |
1 & 1 | 1 |
Przykład czterobitowy:
Operacja | Wynik |
---|---|
1111 & 0000 | 0000 |
1111 & 0001 | 0001 |
1111 & 0010 | 0010 |
1111 & 0100 | 0100 |
Operacja bitowa OR
Gdy podczas operacji bitowej OR na parze cyfr liczba 1 zwraca 1:
Przykład jednostkowy
Operacja | Wynik |
---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Czterobitowy przykład:
Operacja | Wynik |
---|---|
1111 | 0000 | 1111 |
1111 | 0001 | 1111 |
1111 | 0010 | 1111 |
1111 | 0100 | 1111 |
Operacja bitowa XOR
Gdy podczas operacji bitowej XOR na parze cyfr liczby różne są 1, zwraca 1:
Przykład jednostkowy:
Operacja | Wynik |
---|---|
0 ^ 0 | 0 |
0 ^ 1 | 1 |
1 ^ 0 | 1 |
1 ^ 1 | 0 |
Przykład czterobitowy:
Operacja | Wynik |
---|---|
1111 ^ 0000 | 1111 |
1111 ^ 0001 | 1110 |
1111 ^ 0010 | 1101 |
1111 ^ 0100 | 1011 |
JavaScript operacja bitowa AND (&)
Jeśli wszystkie bity są 1, operacja bitowa AND zwraca 1:
dziesiętna | binarna |
---|---|
5 | 00000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 & 1 | 00000000000000000000000000000001 (1) |
Przykład
var x = 5 & 1;
JavaScript operacja bitowa OR (|)
Jeśli jeden z bitów jest 1, operacja OR zwraca 1:
dziesiętna | binarna |
---|---|
5 | 00000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 | 1 | 00000000000000000000000000000101 (5) |
Przykład
var x = 5 | 1;
Operacja XOR (^) w operacjach bitowych w JavaScript
Jeśli liczby bitowe są różne, XOR zwraca 1:
dziesiętna | binarna |
---|---|
5 | 00000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 ^ 1 | 00000000000000000000000000000100 (4) |
Przykład
var x = 5 ^ 1;
Operacja NOT (~) w operacjach bitowych w JavaScript
dziesiętna | binarna |
---|---|
5 | 00000000000000000000000000000101 |
~5 | 11111111111111111111111111111010 (-6) |
Przykład
var x = ~5;
Przesunięcie w lewo (<<), wypełnione zerami w operacjach bitowych w JavaScript
To jest przesunięcie w lewo z wypełnieniem zerami. Jedna lub więcej zer jest wypychana z prawej strony, a najstarszy bit jest usuwany z lewej strony:
dziesiętna | binarna |
---|---|
5 | 00000000000000000000000000000101 |
5 << 1 | 00000000000000000000000000001010 (10) |
Przykład
var x = 5 << 1;
Przesunięcie w prawo (>>), znakowy w operacjach bitowych w JavaScript
To jest przesunięcie w prawo z zachowaniem znaku. Najstarszy bit jest wypychany z lewej strony, a najstarszy bit jest przenoszony na prawą stronę:
dziesiętna | binarna |
---|---|
-5 | 11111111111111111111111111111011 |
-5 >> 1 | 11111111111111111111111111111101 (-3) |
Przykład
var x = -5 >> 1;
Przesunięcie w prawo (>>>), wypełnione zerami w JavaScript
To jest przesunięcie w prawo z wypełnieniem zerami. Jedna lub więcej zer jest wypychana z lewej strony, a najstarszy bit jest przenoszony na prawą stronę:
dziesiętna | binarna |
---|---|
5 | 00000000000000000000000000000101 |
5 >>> 1 | 00000000000000000000000000000010 (2) |
Przykład
var x = 5 >>> 1;
32-bitowy整数 z znakiem (liczba binarna)
Rozumiemy dobrze, że 32-bitowy整数 z ustawionym tylko jednym bitem:
Reprezentacja binarna | Wartość dziesiętna |
---|---|
00000000000000000000000000000001 | 1 |
00000000000000000000000000000010 | 2 |
00000000000000000000000000000100 | 4 |
00000000000000000000000000001000 | 8 |
00000000000000000000000000010000 | 16 |
00000000000000000000000000100000 | 32 |
00000000000000000000000001000000 | 64 |
Dodanie kilku miejsc ujawnia wzorce binarne:
Reprezentacja binarna | Wartość dziesiętna |
---|---|
00000000000000000000000000000101 | 5 (4 + 1) |
00000000000000000000000000101000 | 40 (32 + 8) |
00000000000000000000000000101101 | 45 (32 + 8 + 4 + 1) |
Negatywne liczby to kod uzupełnienia plus 1:
Reprezentacja binarna | Wartość dziesiętna |
---|---|
00000000000000000000000000000101 | 5 |
11111111111111111111111111111011 | -5 |
00000000000000000000000000101000 | 40 |
11111111111111111111111111011000 | -40 |
11111111111111111111111111011001 | -41 |
Konwersja dziesiętnego na binarny
Przykład
function dec2bin(dec){ return (dec >>> 0).toString(2); }
Konwersja binarnego na dziesiętny
Przykład
function bin2dec(bin){ return parseInt(bin, 2).toString(10); }
- Poprzednia strona Rozpakuj JS
- Następna strona Wyrażenia regularne JS