JavaScript bittikohtaisesti


Sisällysluettelo

    Näytä sisällysluettelo


Bittikohtaiset JavaScript-operaattorit

&

Logiikka JA. Asettaa kunkin bitin arvoon 1, jos molemmat bitit ovat 1

|

Logiikka TAI. Asettaa jokaisen bitin arvoon 1, jos toinen kahdesta bitistä on 1

^

Logiikka XOR. Asettaa jokaisen bitin arvoon 1, jos vain toinen kahdesta bitistä on 1

~

Logiikka EI. Kääntää kaikki bitit ylösalaisin

<<

Nollatäyttö vasen siirto. Siirtyy vasemmalle työntämällä nollia sisään oikealta ja antaa vasemmanpuoleisimpien bittien pudota

>>

Allekirjoitettu oikea vaihto. Vaihtaa oikealle työntämällä vasemmanpuoleisimman bitin kopiot sisään vasemmalta ja päästää oikeanpuoleisimman bitin pudota

>>>

Nollatäyttö oikealle. Vaihtaa oikealle työntämällä nollia sisään vasemmalta ja antaa oikeanpuoleisimpien bittien pudota

Esimerkkejä

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 käyttää 32-bittisiä bittioperandeja

JavaScript tallentaa numerot 64-bittisinä liukulukuina, mutta kaikki bittikohtaisesti toiminnot suoritetaan 32-bittisille binääriluvuille.

Ennen bittikohtaisen toiminnon suorittamista JavaScript muuntaa luvut 32-bittisiksi etumerkillisiä kokonaislukuja.

Kun bittikohtainen toiminto on suoritettu, tulos muunnetaan takaisin 64-bittiseksi JavaScriptiksi numeroita.

Yllä olevissa esimerkeissä käytetään 4-bittisiä etumerkittömiä binäärilukuja. Tästä syystä ~ 5 palauttaa 10.

Koska JavaScript käyttää 32 bitin etumerkillisiä kokonaislukuja, se ei palauta 10. Se palauttaa -6.

00000000000000000000000000000101 (5)

11111111111111111111111111111010 (~5=-6)

Etumerkillinen kokonaisluku käyttää vasenta bittiä miinusmerkkinä.



JavaScript Bittikohtainen JA

Kun bittikohtainen JA suoritetaan bittiparille, se palauttaa 1, jos molemmat bitit ovat 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 Bitwise TAI

Kun bittikohtainen TAI suoritetaan bittiparille, se palauttaa arvon 1, jos yksi biteistä on 1:

0 | 0

0

0 | 1

1 

1 | 0

1

1 | 1

1

1111 | 0000

1111

1111 | 0001

1111

1111 | 0010

1111

1111 | 0100

1111


JavaScript Bitwise XOR

Kun bittikohtainen XOR suoritetaan bittiparille, se palauttaa arvon 1, jos bitit ovat erilaisia:

0 ^ 0

0

0 ^ 1

1 

1 ^ 0

1

1 ^ 1

0 

1111 ^ 0000

1111

1111 ^ 0001

1110

1111 ^ 0010

1101

1111 ^ 0100

1011


JavaScript Bittikohtainen JA (&)

Bittikohtainen AND palauttaa arvon 1 vain, jos molemmat bitit ovat 1:

5

00000000000000000000000000000101

1

00000000000000000000000000000001

5 & 1

00000000000000000000000000000001 (1)

Esimerkki

let x = 5 & 1;

Kokeile itse →

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

Bittikohtainen TAI palauttaa arvon 1, jos yksi biteistä on 1:

5

00000000000000000000000000000101

1

00000000000000000000000000000001

5 | 1

00000000000000000000000000000101 (5)

Esimerkki

let x = 5 | 1;

Kokeile itse →

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

Bittikohtainen XOR palauttaa arvon 1, jos bitit ovat erilaisia:

5

00000000000000000000000000000101

1

00000000000000000000000000000001

5 ^ 1

000000000000000000000000000000100 (4)

Esimerkki

let x = 5 ^ 1;

Kokeile itse →

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

5

00000000000000000000000000000101

~5

11111111111111111111111111111010 (-6)

Esimerkki

let x = ~5;

Kokeile itse →

<!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 (nollatäyttö) Bittikohtainen vasen siirto (<<)

Tämä on nollatäytön siirto vasemmalle. Yksi tai useampi nollabitti työnnetään sisään oikealta, ja vasemmanpuoleiset palat putoavat:

5

00000000000000000000000000000101

5 << 1

00000000000000000000000000001010 (10)

Esimerkki

let x = 5 << 1;

Kokeile itse →

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

Tämä on merkki, joka säilyttää oikean siirtymän. Vasemmanpuoleisen bitin kopiot työnnetään sisään vasemmalta, ja oikeanpuoleisimmat palat putoavat:

-5

11111111111111111111111111111011

-5 >> 1

11111111111111111111111111111101 (-3)

Esimerkki

let x = -5 >> 1;

Kokeile itse →

<!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 (nollatäyttö) oikea vaihto (>>>)

Tämä on nollatäyttö oikealle. Yksi tai useampi nollabitti työnnetään sisään vasemmalta, ja oikeanpuoleiset palat putoavat:

5

00000000000000000000000000000101

5 >>> 1

00000000000000000000000000000010 (2)

Esimerkki

let x = 5 >>> 1;

Kokeile itse →

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

Binääriluvut, joissa on vain yksi bittijoukko, on helppo ymmärtää:

00000000000000000000000000000001

1

00000000000000000000000000000010

2

00000000000000000000000000000100

4

00000000000000000000000000001000

8

00000000000000000000000000010000

16

00000000000000000000000000100000

32

00000000000000000000000001000000

64

Muutaman bitin lisääminen paljastaa binäärikuvion:

00000000000000000000000000000101

5 (4 + 1)

00000000000000000000000000001101

13 (8 + 4 + 1)

00000000000000000000000000101101

45 (32 + 8 + 4 + 1)

JavaScript-binääriluvut tallennetaan kahden komplementtimuodossa.

Tämä tarkoittaa, että negatiivinen luku on luvun plus 1 bittikohtainen EI:

00000000000000000000000000000101

5

11111111111111111111111111111011

-5

00000000000000000000000000000110

6

11111111111111111111111111111010

-6

00000000000000000000000000101000

40

11111111111111111111111111011000

-40

vitsi:

Maailmassa on vain 10 tyyppiä ihmisiä: niitä, jotka ymmärtävät binääriä, ja niitä, jotka eivät ymmärrä.


Desimaalien muuntaminen binääriksi

Esimerkki

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

Kokeile itse →

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

Binaarimuunnos desimaalimuotoon

Esimerkki

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

Kokeile itse →

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