JavaScript Bitoperatører

JavaScript Bitoperatører

Operator Navn Beskrivelse
& AND Sæt hver bit til 1, hvis begge bits er 1
| OR Sæt hver bit til 1, hvis én af de to bits er 1
^ XOR Sæt hver bit til 1, hvis kun én af de to bits er 1
~ NOT Reversér alle bits
<< Zero-fyldt venstre skift Ved at skubbe nul fra højre til venstre og fjerne den venstreste bit.
>> Signeret højre skift Ved at skubbe en kopi af den venstreste bit til højre og fjerne den højreste bit.
>>> Zero-fyldt højre skift Ved at skubbe nul fra venstre til højre og fjerne den højreste bit.

Eksempel

Operation Resultat er lig med Resultat
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 bruger 32 bits bitoperationer

JavaScript gemmer tal som 64 bits flydende tal, men alle bitoperationer udføres med 32 bits binære tal.

Før bitoperation konverteres tal til 32 bits signeret heltal.

Efter udførelse af bitoperation konverteres resultatet til 64 bits JavaScript tal.

De ovenstående eksempler bruger 4 bits unsigned binære tal. Så ~ 5 returnerer 10.

Da JavaScript bruger 32 bits signeret heltal, returnerer JavaScript -6.

00000000000000000000000000000101 (5)

11111111111111111111111111111010 (~5 = -6)

Signeret heltal bruger den venstre mest bit som minus.

Bitoperation AND

Når bitoperation AND udføres på et par bitpladser, returneres 1, hvis begge bitpladser er 1.

Enheds eksempel:

Operation Resultat
0 & 0 0
0 & 1 0
1 & 0 0
1 & 1 1

Fyrtalls eksempel:

Operation Resultat
1111 & 0000 0000
1111 & 0001 0001
1111 & 0010 0010
1111 & 0100 0100

Bitoperation OR

Når bitoperation OR udføres på et par bitpladser, returneres 1, hvis mindst én af bitpladserne er 1:

Enheds eksempel

Operation Resultat
0 | 0 0
0 | 1 1
1 | 0 1
1 | 1 1

Fyrtalls operation:

Operation Resultat
1111 | 0000 1111
1111 | 0001 1111
1111 | 0010 1111
1111 | 0100 1111

Bitoperation XOR

Når bitoperation XOR udføres på et par bitpladser, returneres 1, hvis bitpladserne er forskellige:

Enheds eksempel:

Operation Resultat
0 ^ 0 0
0 ^ 1 1
1 ^ 0 1
1 ^ 1 0

Fyrtalls eksempel:

Operation Resultat
1111 ^ 0000 1111
1111 ^ 0001 1110
1111 ^ 0010 1101
1111 ^ 0100 1011

JavaScript bitoperator AND (&)

Hvis begge bitpladser er 1, returnerer bitoperation AND 1:

Tall Binær
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 & 1 00000000000000000000000000000001 (1)

Eksempel

var x = 5 & 1;

Prøv det selv

JavaScript bitoperator OR (|)

Hvis en af bitene er 1, returnerer bitlogisk OR 1:

Tall Binær
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 | 1 00000000000000000000000000000101 (5)

Eksempel

var x = 5 | 1;

Prøv det selv

JavaScript bitlogisk XOR (^)

Hvis bitene er forskellige, returnerer XOR 1:

Tall Binær
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 ^ 1 00000000000000000000000000000100 (4)

Eksempel

var x = 5 ^ 1;

Prøv det selv

JavaScript bitlogisk NOT (~)

Tall Binær
5 00000000000000000000000000000101
~5 11111111111111111111111111111010 (-6)

Eksempel

var x = ~5;

Prøv det selv

JavaScript (nul fyldning) bitflytning (<<)

Dette er en venstre flytning med nul fyldning. En eller flere nulpladser trækkes ind fra højre, og den venstreste plads forlader:

Tall Binær
5 00000000000000000000000000000101
5 << 1 00000000000000000000000000001010 (10)

Eksempel

var x = 5 << 1;

Prøv det selv

JavaScript (meddelelsesnumre) bitflytning (>>)

Dette er et flytning med bevarelse af signalet. Den venstreste plads trækkes ind fra venstre, og den højreste plads forlader:

Tall Binær
-5 11111111111111111111111111111011
-5 >> 1 11111111111111111111111111111101 (-3)

Eksempel

var x = -5 >> 1;

Prøv det selv

JavaScript (nul fyldning) højre flytning (>>>)

Dette er et højre flytning med nul fyldning. En eller flere nulpladser trækkes ind fra venstre, og den højreste plads forlader:

Tall Binær
5 00000000000000000000000000000101
5 >>> 1 00000000000000000000000000000010 (2)

Eksempel

var x = 5 >>> 1;

Prøv det selv

32-bit meddelelsesnumre (binære tal)

Det er let at forstå, at en 32-bit heltal med kun ét sættede ciffer er godt:

Binær repræsentation Decimalværdi
00000000000000000000000000000001 1
00000000000000000000000000000010 2
00000000000000000000000000000100 4
00000000000000000000000000001000 8
00000000000000000000000000010000 16
00000000000000000000000000100000 32
00000000000000000000000001000000 64

Flere bits afslører mønstret i binært:

Binær repræsentation Decimalværdi
00000000000000000000000000000101 5 (4 + 1)
00000000000000000000000000101000 40 (32 + 8)
00000000000000000000000000101101 45 (32 + 8 + 4 + 1)

Negative tal er positivs binære komplement plus 1:

Binær repræsentation Decimalværdi
00000000000000000000000000000101 5
11111111111111111111111111111011 -5
00000000000000000000000000101000 40
11111111111111111111111111011000 -40
11111111111111111111111111011001 -41

Konverter decimal til binært

Eksempel

function dec2bin(dec){
    return (dec >>> 0).toString(2);
}

Prøv det selv

Konverter binært til decimal

Eksempel

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

Prøv det selv