JavaScript Bitoperatorer

JavaScript Bitoperatorer

Operator Namn Beskrivning
& AND Om båda bitarna är 1 sätter varje bit till 1
| OR Om en av två bitar är 1 sätter varje bit till 1
^ XOR Om två bitar endast har en 1 sätter varje bit till 1
~ NOT Invertera alla bitar
<< Nollfyllnadsvänsterflyttning Genom att trycka in noll från höger för att flytta till vänster och låta den vänstra positionen falla av.
>> Signifikant högerflyttning Genom att trycka in en kopia av den vänstra positionen från vänster för att flytta till höger och låta den högra positionen falla av.
>>> Nollfyllnadshögerflyttning Genom att trycka in noll från vänster för att flytta till höger och låta den högra positionen falla av.

Exempel

Operation Resultat Ekvivalent 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 använder 32 bitars bitoperationer

JavaScript lagrar nummer som 64 bitars flyttal, men alla bitoperationer utförs med 32 bitars binära tal.

Innan bitoperationer utförs konverterar JavaScript nummer till 32 bitar teckenbärande heltal.

Efter att ha utfört bitoperationer konverteras resultatet tillbaka till 64 bitars JavaScript-tal.

Ovanstående exempel använder 4 bitar osignerade binära tal. Så ~ 5 returnerar 10.

Eftersom JavaScript använder 32 bitar teckenbärande heltal, returnerar JavaScript -6.

00000000000000000000000000000101 (5)

11111111111111111111111111111010 (~5 = -6)

Teckenbärande heltal använder den vänstra biten som minustecken.

Bitoperator AND

När bitar används i bitoperator AND, returneras 1 om bitarna är alla 1.

Enhetsexempel:

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

Fyra bitars exempel:

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

Bitoperator OR

När bitar används i bitoperator OR, returneras 1 om någon av bitarna är 1:

Enhetsexempel

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

Fyra bitars operation:

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

Bitoperator XOR

När bitar används i bitoperator XOR, returneras 1 om bitarna är olika:

Enhetsexempel:

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

Fyra bitars exempel:

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

JavaScript bitoperator AND (&)

Om bitarna är alla 1, returnerar bitoperator AND 1:

Tolvkommalöst Binär
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 & 1 00000000000000000000000000000001 (1)

Exempel

var x = 5 & 1;

Prova själv

JavaScript bitoperator OR (|)

Om en av bitarna är 1, returnerar bitoperator OR 1:

Tolvkommalöst Binär
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 | 1 00000000000000000000000000000101 (5)

Exempel

var x = 5 | 1;

Prova själv

JavaScript bitoperator XOR (^)

Om bitarna är olika, returnerar XOR 1:

Tolvkommalöst Binär
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 ^ 1 00000000000000000000000000000100 (4)

Exempel

var x = 5 ^ 1;

Prova själv

JavaScript bitoperator NOT (~)

Tolvkommalöst Binär
5 00000000000000000000000000000101
~5 11111111111111111111111111111010 (-6)

Exempel

var x = ~5;

Prova själv

JavaScript (nollfyllning) bitoperator vänsterflyttning (<<)

Detta är en vänsterflyttning med nollfyllning. En eller flera nollor skjuts in från höger, och den vänstra siffran tas bort:

Tolvkommalöst Binär
5 00000000000000000000000000000101
5 << 1 00000000000000000000000000001010 (10)

Exempel

var x = 5 << 1;

Prova själv

JavaScript (teckenbärande) bitoperator högerflyttning (>>)

Detta är en högerflyttning som bevarar tecknet. Den vänstra siffran skjuts in från vänster, och den högra siffran flyttas ut:

Tolvkommalöst Binär
-5 11111111111111111111111111111011
-5 >> 1 11111111111111111111111111111101 (-3)

Exempel

var x = -5 >> 1;

Prova själv

JavaScript (nollfyllning) högerflyttning (>>>)

Detta är en högerflyttning med nollfyllning. En eller flera nollor skjuts in från vänster, och den högra siffran flyttas ut:

Tolvkommalöst Binär
5 00000000000000000000000000000101
5 >>> 1 00000000000000000000000000000010 (2)

Exempel

var x = 5 >>> 1;

Prova själv

32-bitars teckenbärande heltal (binär tal)

Det är enkelt att förstå en 32-bitars heltal med endast ett tecken:

Binär representation Decimalvärde
00000000000000000000000000000001 1
00000000000000000000000000000010 2
00000000000000000000000000000100 4
00000000000000000000000000001000 8
00000000000000000000000000010000 16
00000000000000000000000000100000 32
00000000000000000000000001000000 64

Mer satta bitar avslöjar mönstret i binära systemet:

Binär representation Decimalvärde
00000000000000000000000000000101 5 (4 + 1)
00000000000000000000000000101000 40 (32 + 8)
00000000000000000000000000101101 45 (32 + 8 + 4 + 1)

Negativa tal är positivt talens binära komplement plus 1:

Binär representation Decimalvärde
00000000000000000000000000000101 5
11111111111111111111111111111011 -5
00000000000000000000000000101000 40
11111111111111111111111111011000 -40
11111111111111111111111111011001 -41

Konvertera decimal till binär

Exempel

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

Prova själv

Konvertera binär till decimal

Exempel

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

Prova själv