Operatory bitowe w JavaScript

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;

Spróbuj sam

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;

Spróbuj sam

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;

Spróbuj sam

Operacja NOT (~) w operacjach bitowych w JavaScript

dziesiętna binarna
5 00000000000000000000000000000101
~5 11111111111111111111111111111010 (-6)

Przykład

var x = ~5;

Spróbuj sam

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;

Spróbuj sam

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;

Spróbuj sam

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;

Spróbuj sam

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);
}

Spróbuj sam

Konwersja binarnego na dziesiętny

Przykład

function bin2dec(bin){
    return parseInt(bin, 2).toString(10);
}

Spróbuj sam