JavaScript Bitwise-bewerkingen
JavaScript Bitwise-operators
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 |
Voorbeelden
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 gebruikt 32 bits bitsgewijze operanden
JavaScript slaat getallen op als 64-bits drijvende-kommagetallen, maar alle bitsgewijze bewerkingen worden uitgevoerd op 32-bits binaire getallen.
Voordat een bitsgewijze bewerking wordt uitgevoerd, converteert JavaScript getallen naar 32-bits gehele getallen met teken.
Nadat de bitsgewijze bewerking is uitgevoerd, wordt het resultaat terug geconverteerd naar 64-bits JavaScript-nummers.
De bovenstaande voorbeelden gebruiken 4-bits niet-ondertekende binaire getallen. Hierdoor levert ~ 5 10 op.
Aangezien JavaScript 32-bits gehele getallen met teken gebruikt, zal het geen 10 retourneren. Het zal -6 teruggeven.
0000000000000000000000000000101 (5)
11111111111111111111111111111010 (~5 = -6)
Een geheel getal met teken gebruikt het meest linkse bit als minteken.
Bitgewijs EN
Wanneer een bitsgewijze EN wordt uitgevoerd op een paar bits, wordt 1 geretourneerd als beide bits 1 zijn.
Operatie | Resultaat |
---|---|
0 & 0 | 0 |
0 & 1 | 0 |
1 & 0 | 0 |
1 & 1 | 1 |
Operatie | Resultaat |
---|---|
1111 & 0000 | 0000 |
1111 & 0001 | 0001 |
1111 & 0010 | 0010 |
1111 & 0100 | 0100 |
Bitgewijs OF
Wanneer een bitsgewijze OF wordt uitgevoerd op een paar bits, wordt 1 geretourneerd als een van de bits 1:
Operatie | Resultaat |
---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Operatie | Resultaat |
---|---|
1111 | 0000 | 1111 |
1111 | 0001 | 1111 |
1111 | 0010 | 1111 |
1111 | 0100 | 1111 |
Bitsgewijze XOR
Wanneer een bitsgewijze XOR wordt uitgevoerd op een paar bits, wordt 1 geretourneerd als de bits verschillend zijn:
Operatie | Resultaat |
---|---|
0 ^ 0 | 0 |
0 ^ 1 | 1 |
1 ^ 0 | 1 |
1 ^ 1 | 0 |
Operatie | Resultaat |
---|---|
1111 ^ 0000 | 1111 |
1111 ^ 0001 | 1110 |
1111 ^ 0010 | 1101 |
1111 ^ 0100 | 1011 |
JavaScript Bitgewijs EN (&)
Bitgewijs AND retourneert alleen 1 als beide bits 1 zijn:
Decimale | binair |
---|---|
5 | 0000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 & 1 | 00000000000000000000000000000001 (1) |
Voorbeeld
let x = 5 & 1;
JavaScript Bitgewijs OF (|)
Bitsgewijze OF retourneert 1 als een van de bits 1 is:
Decimale | binair |
---|---|
5 | 0000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 | 1 | 0000000000000000000000000000101 (5) |
Voorbeeld
let x = 5 | 1;
JavaScript Bitwise XOR (^)
Bitwise XOR retourneert 1 als de bits verschillend zijn:
Decimale | binair |
---|---|
5 | 0000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 ^ 1 | 0000000000000000000000000000100 (4) |
Voorbeeld
let x = 5 ^ 1;
JavaScript Bitgewijs NIET (~)
Decimale | binair |
---|---|
5 | 0000000000000000000000000000101 |
~5 | 11111111111111111111111111111010 (-6) |
Voorbeeld
let x = ~5;
JavaScript (nulvulling) Bitsgewijze verschuiving naar links (<<)
Dit is een nulvulling naar links. Een of meer nul-bits worden van rechts naar binnen geduwd en de meest linkse bits vallen eraf:
Decimale | binair |
---|---|
5 | 0000000000000000000000000000101 |
5 << 1 | 00000000000000000000000000001010 (10) |
Voorbeeld
let x = 5 << 1;
JavaScript (tekenbehoud) Bitsgewijze verschuiving naar rechts (>>)
Dit is een teken dat de juiste verschuiving behoudt. Kopieën van het meest linkse bit worden vanaf de linkerkant naar binnen geduwd en de meest rechtse bits vallen eraf:
Decimale | binair |
---|---|
-5 | 11111111111111111111111111111011 |
-5 >> 1 | 11111111111111111111111111111101 (-3) |
Voorbeeld
let x = -5 >> 1;
JavaScript (nulvulling) Shift naar rechts (>>>)
Dit is een nulvulling naar rechts. Een of meer nul-bits worden van links naar binnen geduwd en de meest rechtse bits vallen eraf:
Decimale | binair |
---|---|
5 | 0000000000000000000000000000101 |
5 >>> 1 | 00000000000000000000000000000010 (2) |
Voorbeeld
let x = 5 >>> 1;
Binaire getallen
Binaire getallen met slechts één bitset zijn gemakkelijk te begrijpen:
Binaire weergave | decimale waarde |
---|---|
00000000000000000000000000000001 | 1 |
00000000000000000000000000000010 | 2 |
0000000000000000000000000100 | 4 |
00000000000000000000000000001000 | 8 |
00000000000000000000000000010000 | 16 |
00000000000000000000000000100000 | 32 |
00000000000000000000000001000000 | 64 |
Door nog een paar bits in te stellen, wordt het binaire patroon onthuld:
Binaire weergave | decimale waarde |
---|---|
0000000000000000000000000000101 | 5 (4 + 1) |
00000000000000000000000000001101 | 13 (8 + 4 + 1) |
00000000000000000000000000101101 | 45 (32 + 8 + 4 + 1) |
JavaScript-binaire getallen worden opgeslagen in two's complement-formaat.
Dit betekent dat een negatief getal de bitsgewijze NIET is van het getal plus 1:
Binaire weergave | decimale waarde |
---|---|
0000000000000000000000000000101 | 5 |
11111111111111111111111111111011 | -5 |
000000000000000000000000000110 | 6 |
11111111111111111111111111111010 | -6 |
00000000000000000000000000101000 | 40 |
111111111111111111111111111011000 | -40 |
Decimaal naar binair converteren
Voorbeeld
function dec2bin(dec){
return (dec >>> 0).toString(2);
}
Binair naar decimaal converteren
Voorbeeld
function bin2dec(bin){
return parseInt(bin, 2).toString(10);
}