JavaScript Bitwise Operations
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 |
Voorbeelde
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 gebruik 32 bisse bitsgewyse operande
JavaScript stoor getalle as 64 bisse swaaipuntgetalle, maar alle bitsgewyse bewerkings word op 32 bisse binêre getalle uitgevoer.
Voordat 'n bissgewyse bewerking uitgevoer word, skakel JavaScript getalle om na 32 bisse getekende heelgetalle.
Nadat die bitsgewyse bewerking uitgevoer is, word die resultaat terug na 64 bisse JavaScript-nommers omgeskakel.
Die voorbeelde hierbo gebruik 4 bisse ongetekende binêre getalle. As gevolg hiervan gee ~ 5 10 terug.
Aangesien JavaScript 32 bisse getekende heelgetalle gebruik, sal dit nie 10 gee nie. Dit sal -6 terugstuur.
000000000000000000000000000000101 (5)
111111111111111111111111111111010 (~5 = -6)
'n Getekende heelgetal gebruik die bietjie mees links as die minusteken.
Bietjiegewys EN
Wanneer 'n bissgewyse EN op 'n paar bisse uitgevoer word, gee dit 1 terug as albei bisse 1 is.
Operasie | Resultaat |
---|---|
0 en 0 | 0 |
0 en 1 | 0 |
1 en 0 | 0 |
1 en 1 | 1 |
Operasie | Resultaat |
---|---|
1111 en 0000 | 0000 |
1111 en 0001 | 0001 |
1111 en 0010 | 0010 |
1111 en 0100 | 0100 |
Bitgewys OF
Wanneer 'n bissgewyse OF op 'n paar bisse uitgevoer word, gee dit 1 terug as een van die bisse 1 is:
Operasie | Resultaat |
---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Operasie | Resultaat |
---|---|
1111 | 0000 | 1111 |
1111 | 0001 | 1111 |
1111 | 0010 | 1111 |
1111 | 0100 | 1111 |
Bitgewys XOR
Wanneer 'n bissgewyse XOR op 'n paar bisse uitgevoer word, gee dit 1 terug as die bisse verskillend is:
Operasie | Resultaat |
---|---|
0 ^ 0 | 0 |
0 ^ 1 | 1 |
1 ^ 0 | 1 |
1 ^ 1 | 0 |
Operasie | Resultaat |
---|---|
1111 ^ 0000 | 1111 |
1111 ^ 0001 | 1110 |
1111 ^ 0010 | 1101 |
1111 ^ 0100 | 1011 |
JavaScript Bitwise EN (&)
Bitsgewys EN gee slegs 1 terug as beide bisse 1 is:
Desimale | Binêre |
---|---|
5 | 0000000000000000000000000000000101 |
1 | 00000000000000000000000000000000001 |
5 en 1 | 0000000000000000000000000000000001 (1) |
Voorbeeld
let x = 5 & 1;
JavaScript bitsgewys OF (|)
Bitsgewys OF gee 1 terug as een van die bisse 1 is:
Desimale | Binêre |
---|---|
5 | 0000000000000000000000000000000101 |
1 | 00000000000000000000000000000000001 |
5 | 1 | 000000000000000000000000000000101 (5) |
Voorbeeld
let x = 5 | 1;
JavaScript Bitwise XOR (^)
Bitwise XOR gee 1 terug as die bisse verskil:
Desimale | Binêre |
---|---|
5 | 0000000000000000000000000000000101 |
1 | 00000000000000000000000000000000001 |
5 ^ 1 | 000000000000000000000000000000100 (4) |
Voorbeeld
let x = 5 ^ 1;
JavaScript Bitwise NIE (~)
Desimale | Binêre |
---|---|
5 | 0000000000000000000000000000000101 |
~5 | 1111111111111111111111111111111010 (-6) |
Voorbeeld
let x = ~5;
JavaScript (Zero Fill) Bitsgewys linksverskuiwing (<<)
Dit is 'n nulvul-linkerskuif. Een of meer nulpunte word van regs af ingedruk, en die linkerkantste stukkies val af:
Desimale | Binêre |
---|---|
5 | 0000000000000000000000000000000101 |
5 << 1 | 00000000000000000000000000001010 (10) |
Voorbeeld
let x = 5 << 1;
JavaScript (Bewaring van tekens) Bitsgewys Regsverskuiwing (>>)
Dit is 'n teken wat regsverskuiwing bewaar. Afskrifte van die linkerkantste stukkie word van links af ingedruk, en die mees regte stukkies val af:
Desimale | Binêre |
---|---|
-5 | 11111111111111111111111111111111011 |
-5 >> 1 | 1111111111111111111111111111111101 (-3) |
Voorbeeld
let x = -5 >> 1;
JavaScript (nul invul) Regsverskuiwing (>>>)
Dit is 'n nulvul regsverskuiwing. Een of meer nulpunte word van links af ingedruk, en die mees regterkantse stukkies val af:
Desimale | Binêre |
---|---|
5 | 0000000000000000000000000000000101 |
5 >>> 1 | 0000000000000000000000000000000010 (2) |
Voorbeeld
let x = 5 >>> 1;
Binêre getalle
Binêre getalle met slegs een bietjie stel is maklik om te verstaan:
Binêre verteenwoordiging | Desimale waarde |
---|---|
00000000000000000000000000000000001 | 1 |
0000000000000000000000000000000010 | 2 |
000000000000000000000000000000100 | 4 |
000000000000000000000000000001000 | 8 |
00000000000000000000000000010000 | 16 |
00000000000000000000000000100000 | 32 |
00000000000000000000000001000000 | 64 |
Deur nog 'n paar stukkies in te stel, onthul die binêre patroon:
Binêre verteenwoordiging | Desimale waarde |
---|---|
0000000000000000000000000000000101 | 5 (4 + 1) |
000000000000000000000000000001101 | 13 (8 + 4 + 1) |
000000000000000000000000000101101 | 45 (32 + 8 + 4 + 1) |
JavaScript-binêre getalle word in twee se komplementformaat gestoor.
Dit beteken dat 'n negatiewe getal die bitsgewys NIE van die getal plus 1 is nie:
Binêre verteenwoordiging | Desimale waarde |
---|---|
0000000000000000000000000000000101 | 5 |
11111111111111111111111111111111011 | -5 |
0000000000000000000000000000000110 | 6 |
11111111111111111111111111111111010 | -6 |
00000000000000000000000000101000 | 40 |
1111111111111111111111111111011000 | -40 |
Omskakeling van desimale na binêre
Voorbeeld
function dec2bin(dec){
return (dec >>> 0).toString(2);
}
Skakel Binêr na Desimale om
Voorbeeld
function bin2dec(bin){
return parseInt(bin, 2).toString(10);
}