JavaScript Bitoperatører
- Forrige side JS-destrukturering
- Næste side JS-regulære udtryk
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;
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;
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;
JavaScript bitlogisk NOT (~)
Tall | Binær |
---|---|
5 | 00000000000000000000000000000101 |
~5 | 11111111111111111111111111111010 (-6) |
Eksempel
var x = ~5;
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;
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;
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;
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); }
Konverter binært til decimal
Eksempel
function bin2dec(bin){ return parseInt(bin, 2).toString(10); }
- Forrige side JS-destrukturering
- Næste side JS-regulære udtryk