Samouczek JS

JS DOM Wprowadzenie do JS JS Dokąd Wyjście JS Oświadczenia JS Składnia JS Komentarze JS Zmienne JS JS Let JS Const Operatorzy JS Arytmetyka JS Zadanie JS Typy danych JS Funkcje JS Obiekty JS Wydarzenia JS JS Strings Metody ciągów JS Wyszukiwanie ciągów JS Szablony JS String Numery JS Metody liczbowe JS Tablice JS Metody tablic JS Sortowanie tablic JS Iteracja tablicy JS JS Array Const JS Daty Formaty daty JS JS Data Pobierz metody Metody ustawiania daty JS Matematyka JS JS losowo JS Booleans Porównania JS Warunki JS Przełącznik JS Pętla JS dla Pętla JS dla In Pętla JS dla Of Pętla JS, podczas gdy Przerwa JS Iterable JS Zestawy JS Mapy JS Typ JS Konwersja typu JS JS Bitwise JS RegExp Błędy JS Zakres JS JS Podnoszenie Tryb ścisły JS JS to słowo kluczowe Funkcja strzałki JS Klasy JS JS JSON Debugowanie JS Przewodnik po stylu JS Najlepsze praktyki JS Błędy JS Wydajność JS JS słowa zastrzeżone

Wersje JS

Wersje JS JS 2009 (ES5) JS 2015 (ES6) JS 2016 JS 2017 JS 2018 JS IE / Krawędź Historia JS

Obiekty JS

Definicje obiektów Właściwości obiektu Metody obiektowe Wyświetlanie obiektów Akcesoria do obiektów Konstruktorzy obiektów Prototypy obiektów Iterowalne obiekty Zestawy obiektów Mapy obiektów Odniesienie do obiektu

Funkcje JS

Definicje funkcji Parametry funkcji Wywołanie funkcji Wywołanie funkcji Funkcja Zastosuj Zamknięcia funkcji

Klasy JS

Wprowadzenie do zajęć Dziedziczenie klas Klasa statyczna

JS Async

Oddzwaniania JS Asynchroniczny JS JS Obietnice JS Async/Oczekiwanie

JS HTML DOM

Wprowadzenie do DOM Metody DOM Dokument DOM Elementy DOM DOM HTML Formularze DOM DOM CSS Animacje DOM Wydarzenia DOM Odbiornik zdarzeń DOM Nawigacja DOM Węzły DOM Kolekcje DOM Listy węzłów DOM

Zestawienie komponentów przeglądarki JS

Okno JS Ekran JS Lokalizacja JS Historia JS JS Navigator Wyskakujący alert JS Czas JS Pliki cookie JS

JS Web API

Wprowadzenie do internetowego interfejsu API Interfejs API formularzy internetowych Interfejs API historii online API przechowywania danych w sieci Web Web Worker API Internetowy interfejs API pobierania Internetowy interfejs API geolokalizacji

JS AJAX

Wprowadzenie do AJAX AJAX XMLHttp Żądanie AJAX Odpowiedź AJAX Plik XML AJAX AJAX PHP ASP AJAX Baza danych AJAX Aplikacje AJAX Przykłady AJAX

JS JSON

Wprowadzenie do JSON Składnia JSON JSON a XML Typy danych JSON Analiza JSON JSON Obiekty JSON Tablice JSON Serwer JSON JSON PHP JSON HTML JSON JSONP

JS kontra jQuery

Selektory jQuery jQuery HTML jQuery CSS jQuery DOM

Grafika JS

Grafika JS JS płótno JS Działka JS Chart.js Wykres JS Google JS D3.js

Przykłady JS

Przykłady JS JS HTML DOM Wejście JS HTML Obiekty HTML JS Wydarzenia JS HTML Przeglądarka JS Edytor JS Ćwiczenia JS JS Quiz Certyfikat JS

Referencje JS

Obiekty JavaScript Obiekty HTML DOM


Operacje bitowe JavaScript


Operatory bitowe JavaScript

Operator Name Description
& AND Sets each bit to 1 if both bits are 1
| OR Sets each bit to 1 if one of two bits is 1
^ XOR Sets each bit to 1 if only one of two bits is 1
~ NOT Inverts all the bits
<< Zero fill left shift Shifts left by pushing zeros in from the right and let the leftmost bits fall off
>> Signed right shift Shifts right by pushing copies of the leftmost bit in from the left, and let the rightmost bits fall off
>>> Zero fill right shift Shifts right by pushing zeros in from the left, and let the rightmost bits fall off

Przykłady

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 używa 32-bitowych operandów bitowych

JavaScript przechowuje liczby jako 64-bitowe liczby zmiennoprzecinkowe, ale wszystkie operacje bitowe są wykonywane na 32-bitowych liczbach binarnych.

Przed wykonaniem operacji bitowej JavaScript konwertuje liczby na 32-bitowe liczby całkowite ze znakiem.

Po wykonaniu operacji bitowej wynik jest konwertowany z powrotem na 64-bitowe liczby JavaScript.

Powyższe przykłady wykorzystują 4-bitowe liczby binarne bez znaku. Z tego powodu ~5 zwraca 10.

Ponieważ JavaScript używa 32-bitowych liczb całkowitych ze znakiem, nie zwróci 10. Zwróci -6.

0000000000000000000000000000000101 (5)

111111111111111111111111111111010 (~5 = -6)

Liczba całkowita ze znakiem używa skrajnego lewego bitu jako znaku minus.



Bitowe AND

Kiedy bitowe AND jest wykonywane na parze bitów, zwraca 1, jeśli oba bity są 1.

Jeden przykład:
OperacjaWynik
0 i 00
0 i 10
1 i 00
1 i 11
Przykład 4 bity:
OperacjaWynik
1111 i 00000000
1111 i 00010001
1111 i 00100010
1111 i 01000100

Bitowe OR

Kiedy bitowe OR jest wykonywane na parze bitów, zwraca 1, jeśli jeden z bitów ma wartość 1:

Jeden przykład:
OperacjaWynik
0 | 00
0 | 1
1 | 01
1 | 11
Przykład 4 bity:
OperacjaWynik
1111 | 00001111
1111 | 00011111
1111 | 00101111
1111 | 01001111

Bitowe XOR

Gdy bitowe XOR jest wykonywane na parze bitów, zwraca 1, jeśli bity są różne:

Jeden przykład:
OperacjaWynik
0^00
0^1
1 ^ 01
1 ^ 1
Przykład 4 bity:
OperacjaWynik
1111 ^ 00001111
1111^00011110
1111^00101101
1111 ^ 01001011

JavaScript Bitowe AND (&)

Bitowe AND zwraca 1 tylko wtedy, gdy oba bity to 1:

DziesiętnyDwójkowy
50000000000000000000000000000000101
10000000000000000000000000000000001
5 i 100000000000000000000000000000001 (1)

Przykład

let x = 5 & 1;

JavaScript Bitowe LUB (|)

Bitowe OR zwraca 1, jeśli jeden z bitów to 1:

DziesiętnyDwójkowy
50000000000000000000000000000000101
10000000000000000000000000000000001
5 | 10000000000000000000000000000000101 (5)

Przykład

let x = 5 | 1;

JavaScript Bitowe XOR (^)

Bitwise XOR zwraca 1, jeśli bity są różne:

DziesiętnyDwójkowy
50000000000000000000000000000000101
10000000000000000000000000000000001
5 ^ 10000000000000000000000000000000100 (4)

Przykład

let x = 5 ^ 1;

JavaScript Bitowe NIE (~)

DziesiętnyDwójkowy
50000000000000000000000000000000101
~51111111111111111111111111111111010 (-6)

Przykład

let x = ~5;

JavaScript (wypełnienie zerowe) Bitowe przesunięcie w lewo (<<)

To jest przesunięcie w lewo z zerowym wypełnieniem. Jeden lub więcej bitów zerowych jest wpychanych od prawej strony, a skrajne lewe bity odpadają:

DziesiętnyDwójkowy
50000000000000000000000000000000101
5 << 100000000000000000000000000001010 (10)

Przykład

let x = 5 << 1;

JavaScript (zachowanie znaków) Bitowe przesunięcie w prawo (>>)

To jest znak zachowania właściwego przesunięcia. Kopie skrajnego lewego bitu są wsuwane od lewej, a skrajne prawe bity odpadają:

DziesiętnyDwójkowy
-51111111111111111111111111111111011
-5 >> 1111111111111111111111111111111101 (-3)

Przykład

let x = -5 >> 1;

JavaScript (wypełnienie zerowe) Prawy Shift (>>>)

To jest przesunięcie w prawo z zerowym wypełnieniem. Jeden lub więcej bitów zerowych jest wpychanych od lewej strony, a skrajne prawe bity odpadają:

DziesiętnyDwójkowy
50000000000000000000000000000000101
5 >>> 1000000000000000000000000000000010 (2)

Przykład

let x = 5 >>> 1;

Liczby binarne

Liczby binarne z tylko jednym zestawem bitów są łatwe do zrozumienia:

Reprezentacja binarnaWartość dziesiętna
00000000000000000000000000000000011
00000000000000000000000000000000102
00000000000000000000000000000001004
000000000000000000000000000000010008
00000000000000000000000000001000016
00000000000000000000000000010000032
000000000000000000000000000100000064

Ustawienie kilku dodatkowych bitów ujawnia wzór binarny:

Reprezentacja binarnaWartość dziesiętna
00000000000000000000000000000001015 (4 + 1)
00000000000000000000000000000110113 (8 + 4 + 1)
00000000000000000000000000010110145 (32 + 8 + 4 + 1)

Liczby binarne JavaScript są przechowywane w formacie uzupełnienia do dwóch.

Oznacza to, że liczba ujemna jest bitową NIE z liczby plus 1:

Reprezentacja binarnaWartość dziesiętna
00000000000000000000000000000001015
1111111111111111111111111111111011-5
00000000000000000000000000000001106
1111111111111111111111111111111010-6
000000000000000000000000000010100040
1111111111111111111111111111011000-40

Konwersja dziesiętna na binarną

Przykład

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

Konwersja binarnego na dziesiętny

Przykład

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