JavaScript bitvis


Innehållsförteckning

    Visa innehållsförteckning


JavaScript Bitwise Operators

&

Logik OCH. Ställer in varje bit till 1 om båda bitarna är 1

|

Logik ELLER. Ställer in varje bit till 1 om en av två bitar är 1

^

Logisk XOR. Ställer in varje bit till 1 om bara en av två bitar är 1

~

Logik INTE. Inverterar alla bitar

<<

Nollfyllning vänsterväxling. Skiftar vänster genom att trycka in nollor från höger och låter bitarna längst till vänster falla av

>>

Signerad högerskifte. Skiftar åt höger genom att trycka in kopior av biten längst till vänster från vänster och låt bitarna längst till höger falla av

>>>

Nollfyllning högerväxling. Skiftar åt höger genom att trycka in nollor från vänster och låt bitarna längst till höger falla av

Exempel

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 använder 32 bitar bitvisa operander

JavaScript lagrar tal som 64-bitars flyttal, men alla bitvis operationer utförs på 32 bitars binära tal.

Innan en bitvis operation utförs konverterar JavaScript siffror till 32 bitar undertecknade heltal.

Efter att den bitvisa operationen har utförts konverteras resultatet tillbaka till 64 bitars JavaScript tal.

Exemplen ovan använder 4 bitar osignerade binära tal. På grund av detta returnerar ~ 5 10.

Eftersom JavaScript använder 32 bitars signerade heltal, kommer det inte att returnera 10. Det kommer att returnera -6.

000000000000000000000000000000101 (5)

111111111111111111111111111111010 (~5=-6)

Ett heltal med tecken använder biten längst till vänster som minustecken.



JavaScript bitvis OCH

När en bitvis OCH utförs på ett par bitar, returnerar det 1 om båda bitarna är 1.

0 & 0

0

0 & 1

0

1 & 0

0

1 & 1

1

1111 & 0000

0000

1111 & 0001

0001

1111 & 0010

0010

1111 & 0100

0100


JavaScript bitvis ELLER

När ett bitvis ELLER utförs på ett par bitar, returnerar det 1 om en av bitarna är 1:

0 | 0

0

0 | 1

1 | 0

1

1 | 1

1

1111 | 0000

1111

1111 | 0001

1111

1111 | 0010

1111

1111 | 0100

1111


JavaScript bitvis XOR

När en bitvis XOR utförs på ett par bitar, returnerar den 1 om bitarna är olika:

0 ^ 0

0

0 ^ 1

1 ^ 0

1

1 ^ 1

1111 ^ 0000

1111

1111 ^ 0001

1110

1111 ^ 0010

1101

1111 ^ 0100

1011


JavaScript bitvis OCH (&)

Bitvis OCH returnerar endast 1 om båda bitarna är 1:

5

00000000000000000000000000000101

1

00000000000000000000000000000001

5 & 1

00000000000000000000000000000000001 (1)

Exempel

let x = 5 & 1;

Prova själv →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Bitwise AND</h1>
<h2>The &amp; Operator</h2>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = 5 & 1;
</script>

</body>
</html> 

JavaScript bitvis ELLER (|)

Bitvis ELLER returnerar 1 om en av bitarna är 1:

5

00000000000000000000000000000101

1

00000000000000000000000000000001

5 | 1

000000000000000000000000000000101 (5)

Exempel

let x = 5 | 1;

Prova själv →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Bitwise OR</h1>
<h2>The | Operator</h2>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = 5 | 1;
</script>

</body>
</html>

JavaScript bitvis XOR (^)

Bitvis XOR returnerar 1 om bitarna är olika:

5

00000000000000000000000000000101

1

00000000000000000000000000000001

5 ^ 1

000000000000000000000000000000100 (4)

Exempel

let x = 5 ^ 1;

Prova själv →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Bitwise XOR</h1>
<h2>The ^ Operator</h2>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = 5 ^ 1;
</script>

</body>
</html>

JavaScript bitvis INTE (~)

5

00000000000000000000000000000101

~5

111111111111111111111111111111010 (-6)

Exempel

let x = ~5;

Prova själv →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Bitwise NOT</h1>
<h2>The ~ Operator</h2>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = ~ 5;
</script>

</body>
</html>

JavaScript (nollfyllning) Vänsterskift bitvis (<<)

Detta är ett nollfyllningsvänsterskifte. En eller flera nollbitar trycks in från höger, och bitarna längst till vänster faller av:

5

00000000000000000000000000000101

5 << 1

00000000000000000000000000001010 (10)

Exempel

let x = 5 << 1;

Prova själv →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Bitwise Left</h1>
<h2>The &lt;&lt; Operator</h2>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = 5 << 1;
</script>

</body>
</html>

JavaScript (skyltbevarande) Bitvis högerskifte (>>)

Detta är en skylt som bevarar högerförskjutning. Kopior av biten längst till vänster trycks in från vänster, och bitarna längst till höger faller av:

-5

11111111111111111111111111111011

-5 >> 1

111111111111111111111111111111101 (-3)

Exempel

let x = -5 >> 1;

Prova själv →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Signed Bitwise Right</h1>
<h2>The &gt;&gt; Operator</h2>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = -5 >> 1;
</script>

</body>
</html>

JavaScript (Nollfyllning) Högerskift (>>>)

Detta är en nollfyllning åt höger. En eller flera nollbitar trycks in från vänster, och bitarna längst till höger faller av:

5

00000000000000000000000000000101

5 >>> 1

0000000000000000000000000000000010 (2)

Exempel

let x = 5 >>> 1;

Prova själv →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Unsigned Bitwise Right</h1>
<h2>The &gt;&gt;&gt; Operator</h2>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = 5 >>> 1;
</script>

</body>
</html>

Binära tal

Binära tal med bara en bituppsättning är lätta att förstå:

00000000000000000000000000000001

1

00000000000000000000000000000010

2

00000000000000000000000000000100

4

00000000000000000000000000001000

8

00000000000000000000000000010000

16

00000000000000000000000000100000

32

00000000000000000000000001000000

64

Att ställa in ytterligare några bitar avslöjar det binära mönstret:

00000000000000000000000000000101

5 (4 + 1)

00000000000000000000000000001101

13 (8 + 4 + 1)

00000000000000000000000000101101

45 (32 + 8 + 4 + 1)

Binära JavaScript-tal lagras i tvås komplementformat.

Detta betyder att ett negativt tal är bitvis INTE av talet plus 1:

00000000000000000000000000000101

5

11111111111111111111111111111011

-5

00000000000000000000000000000110

6

11111111111111111111111111111010

-6

00000000000000000000000000101000

40

11111111111111111111111111011000

-40

Skämt:

Det finns bara 10 typer av människor i världen: de som förstår binärt och de som inte gör det.


Konvertera decimal till binär

Exempel

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

Prova själv →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Convert Decimal to Binary</h1>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = dec2bin(-5);
function dec2bin(dec){
  return (dec >>> 0).toString(2);
}
</script>

</body>
</html>

Konvertera binär till decimal

Exempel

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

Prova själv →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Convert Binary to Decimal</h2>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = bin2dec(101);
function bin2dec(bin){
  return parseInt(bin, 2).toString(10);
}
</script>

</body>
</html>