JavaScript Bitově


Obsah

    Zobrazit obsah


Bitové operátory JavaScriptu

&

Logika A. Nastaví každý bit na 1, pokud jsou oba bity 1

|

Logika NEBO. Nastaví každý bit na 1, pokud je jeden ze dvou bitů 1

^

Logika XOR. Nastaví každý bit na 1, pokud je pouze jeden ze dvou bitů 1

~

Logika NE. Invertuje všechny bity

<<

Posun doleva s nulovou výplní. Posouvá doleva zatlačením nul zprava a nechá vypadnout bity nejvíce vlevo

>>

Podepsaný pravý posun. Posouvá doprava zatlačením kopií bitu nejvíce vlevo dovnitř a ponechá bity nejvíce vpravo spadnout z

>>>

Posun doprava s nulovou výplní. Posouvá doprava zatlačením nul zleva a nechá vypadnout bity nejvíce vpravo

Příklady

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 používá 32bitové bitové operandy

JavaScript ukládá čísla jako 64bitová čísla s plovoucí desetinnou čárkou, ale všechna bitově operace se provádějí na 32bitových binárních číslech.

Před provedením bitové operace JavaScript převede čísla na 32 bitů celá čísla se znaménkem.

Po provedení bitové operace se výsledek převede zpět na 64bitový JavaScript čísla.

Výše uvedené příklady používají 4bitová binární čísla bez znaménka. Z tohoto důvodu ~ 5 vrátí 10.

Protože JavaScript používá 32bitová celá čísla se znaménkem, nevrátí 10. Vrátí -6.

0000000000000000000000000000101 (5)

1111111111111111111111111111010 (~5=-6)

Celé číslo se znaménkem používá bit zcela vlevo jako znaménko mínus.



JavaScript Bitově AND

Když je bitový AND proveden na páru bitů, vrátí 1, pokud jsou oba bity 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 Bitově NEBO

Když je bitový OR proveden na páru bitů, vrátí 1, pokud je jeden z bitů 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

Když je bitový XOR proveden na páru bitů, vrátí 1, pokud se bity liší:

0 ^ 0

0

0 ^ 1

1 ^ 0

1

1 ^ 1

1111 ^ 0000

1111

1111 ^ 0001

1110

1111 ^ 0010

1101

1111 ^ 0100

1011


JavaScript bitové A (&)

Bitový AND vrátí 1, pouze pokud jsou oba bity 1:

5

00000000000000000000000000000101

1

00000000000000000000000000000001

5 & 1

00000000000000000000000000000001 (1)

Příklad

let x = 5 & 1;

Zkuste to sami →

<!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 Bitově NEBO (|)

Bitový OR vrátí 1, pokud je jeden z bitů 1:

5

00000000000000000000000000000101

1

00000000000000000000000000000001

5 | 1

0000000000000000000000000000101 (5)

Příklad

let x = 5 | 1;

Zkuste to sami →

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

Bitový XOR vrátí 1, pokud se bity liší:

5

00000000000000000000000000000101

1

00000000000000000000000000000001

5 ^ 1

0000000000000000000000000000100 (4)

Příklad

let x = 5 ^ 1;

Zkuste to sami →

<!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 bitově NE (~)

5

00000000000000000000000000000101

~5

1111111111111111111111111111010 (-6)

Příklad

let x = ~5;

Zkuste to sami →

<!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 (nulová výplň) bitový levý Shift (<<)

Toto je posun doleva s nulovou výplní. Jeden nebo více nulových bitů je vložen zprava, a bity nejvíce vlevo odpadnou:

5

00000000000000000000000000000101

5 << 1

0000000000000000000000000001010 (10)

Příklad

let x = 5 << 1;

Zkuste to sami →

<!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 (zachování znaménka) Bitový posun doprava (>>)

Toto je znak zachovávání pravého posunu. Kopie bitu zcela vlevo jsou posunuty dovnitř zleva a bity nejvíce vpravo odpadnou:

-5

11111111111111111111111111111011

-5 >> 1

1111111111111111111111111111101 (-3)

Příklad

let x = -5 >> 1;

Zkuste to sami →

<!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 (nulová výplň) pravý Shift (>>>)

Toto je posun doprava s nulovou výplní. Jeden nebo více nulových bitů je vložen zleva, a bity nejvíce vpravo vypadnou:

5

00000000000000000000000000000101

5 >>> 1

0000000000000000000000000000010 (2)

Příklad

let x = 5 >>> 1;

Zkuste to sami →

<!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ární čísla

Binární čísla s pouze jednou bitovou sadou jsou snadno pochopitelná:

00000000000000000000000000000001

1

00000000000000000000000000000010

2

00000000000000000000000000000100

4

00000000000000000000000000001000

8

00000000000000000000000000010000

16

00000000000000000000000000100000

32

00000000000000000000000001000000

64

Nastavení několika dalších bitů odhalí binární vzor:

00000000000000000000000000000101

5 (4 + 1)

00000000000000000000000000001101

13 (8 + 4 + 1)

00000000000000000000000000101101

45 (32 + 8 + 4 + 1)

Binární čísla JavaScriptu jsou uložena ve formátu dvojkového doplňku.

To znamená, že záporné číslo je bitové NOT čísla plus 1:

00000000000000000000000000000101

5

11111111111111111111111111111011

-5

00000000000000000000000000000110

6

11111111111111111111111111111010

-6

00000000000000000000000000101000

40

11111111111111111111111111011000

-40

Žert :

Na světě je pouze 10 typů lidí: ti, kteří rozumí binárnímu systému, a ti, kteří ne.


Převod desítkové soustavy na binární

Příklad

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

Zkuste to sami →

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

Převod binárních na desítkové

Příklad

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

Zkuste to sami →

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