JavaScript bitvis


Indholdsfortegnelse

    Vis indholdsfortegnelse


JavaScript Bitwise Operators

&

Logik OG. Sætter hver bit til 1, hvis begge bits er 1

|

Logik ELLER. Sætter hver bit til 1, hvis en af to bits er 1

^

Logik XOR. Sætter hver bit til 1, hvis kun én af to bits er 1

~

Logik IKKE. Inverterer alle bits

<<

Nulfyld venstre skift. Skifter til venstre ved at trykke nuller ind fra højre og lader bits længst til venstre falde af

>>

Signeret højre skift. Skifter til højre ved at skubbe kopier af bit længst til venstre ind fra venstre, og lad bit længst til højre falde af

>>>

Nulfyld højre skift. Skifter til højre ved at trykke nuller ind fra venstre, og lader bits længst til højre falde af

Eksempler

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 bruger 32 bit bitvise operander

JavaScript gemmer tal som 64-bit flydende kommatal, men alle bitvis operationer udføres på 32 bit binære tal.

Inden en bitvis handling udføres, konverterer JavaScript tal til 32 bit signerede heltal.

Efter den bitvise handling er udført, konverteres resultatet tilbage til 64 bit JavaScript tal.

Eksemplerne ovenfor bruger 4 bit binære tal uden fortegn. På grund af dette returnerer ~ 5 10.

Da JavaScript bruger 32 bit signerede heltal, vil det ikke returnere 10. Det vil returnere -6.

000000000000000000000000000000101 (5)

11111111111111111111111111111010 (~5=-6)

Et heltal med fortegn bruger bit længst til venstre som minustegnet.



JavaScript Bitwise OG

Når en bitvis OG udføres på et par bit, returnerer det 1, hvis begge bits er 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 en bitvis OR udføres på et par bit, returnerer det 1, hvis en af bitsene er 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 Bitwise XOR

Når en bitvis XOR udføres på et par bit, returnerer det 1, hvis bitsene er forskellige:

0 ^ 0

0

0 ^ 1

1 ^ 0

1

1 ^ 1

1111 ^ 0000

1111

1111 ^ 0001

1110

1111 ^ 0010

1101

1111 ^ 0100

1011


JavaScript bitvis OG (&)

Bitvist OG returnerer kun 1, hvis begge bits er 1:

5

00000000000000000000000000000101

1

00000000000000000000000000000001

5 & 1

0000000000000000000000000000000001 (1)

Eksempel

let x = 5 & 1;

Prøv det selv →

<!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 (|)

Bitwise OR returnerer 1, hvis en af bitsene er 1:

5

00000000000000000000000000000101

1

00000000000000000000000000000001

5 | 1

000000000000000000000000000000101 (5)

Eksempel

let x = 5 | 1;

Prøv det selv →

<!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 Bitwise XOR (^)

Bitwise XOR returnerer 1, hvis bits er forskellige:

5

00000000000000000000000000000101

1

00000000000000000000000000000001

5 ^ 1

000000000000000000000000000000100 (4)

Eksempel

let x = 5 ^ 1;

Prøv det selv →

<!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 IKKE (~)

5

00000000000000000000000000000101

~5

111111111111111111111111111111010 (-6)

Eksempel

let x = ~5;

Prøv det selv →

<!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 (nul fyld) Bitvis venstre skift (<<)

Dette er et nul-fyld venstre skift. En eller flere nul bits skubbes ind fra højre, og de stykker længst til venstre falder af:

5

00000000000000000000000000000101

5 << 1

00000000000000000000000000001010 (10)

Eksempel

let x = 5 << 1;

Prøv det selv →

<!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 (Sign Conserving) Bitwise Right Shift (>>)

Dette er et tegn, der bevarer højre skift. Kopier af bit længst til venstre skubbes ind fra venstre, og de længst til højre falder af:

-5

11111111111111111111111111111011

-5 >> 1

111111111111111111111111111111101 (-3)

Eksempel

let x = -5 >> 1;

Prøv det selv →

<!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 (nuludfyldning) Højre skift (>>>)

Dette er et nulfyld højreskift. En eller flere nul bits er skubbet ind fra venstre, og de længst til højre falder af:

5

00000000000000000000000000000101

5 >>> 1

000000000000000000000000000000010 (2)

Eksempel

let x = 5 >>> 1;

Prøv det selv →

<!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ære tal

Binære tal med kun et bitsæt er lette at forstå:

00000000000000000000000000000001

1

00000000000000000000000000000010

2

00000000000000000000000000000100

4

00000000000000000000000000001000

8

00000000000000000000000000010000

16

00000000000000000000000000100000

32

00000000000000000000000001000000

64

Indstilling af nogle flere bits afslører det binære mønster:

00000000000000000000000000000101

5 (4 + 1)

00000000000000000000000000001101

13 (8 + 4 + 1)

00000000000000000000000000101101

45 (32 + 8 + 4 + 1)

JavaScript binære tal gemmes i to's komplementformat.

Dette betyder, at et negativt tal er bitvis IKKE af tallet plus 1:

00000000000000000000000000000101

5

11111111111111111111111111111011

-5

00000000000000000000000000000110

6

11111111111111111111111111111010

-6

00000000000000000000000000101000

40

11111111111111111111111111011000

-40

Joke :

Der er kun 10 typer mennesker i verden: dem, der forstår binært, og dem, der ikke gør.


Konvertering af decimal til binær

Eksempel

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

Prøv det selv →

<!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>

Konvertering af binær til decimal

Eksempel

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

Prøv det selv →

<!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>