ЛУЧШИЙ САЙТ ДЛЯ РАЗРАБОТЧИКОВ
×

JavaScript учебник

JS HOME JS Introduction JS Where To JS Output JS Statements JS Syntax JS Comments JS Variables JS Operators JS Arithmetic JS Assignment JS Data Types JS Functions JS Objects JS Scope JS Events JS Strings JS String Methods JS Numbers JS Number Methods JS Arrays JS Array Methods JS Array Sort JS Array Iteration JS Dates JS Date Formats JS Date Get Methods JS Date Set Methods JS Math JS Random JS Booleans JS Comparisons JS Conditions JS Switch JS Loop For JS Loop While JS Break JS Type Conversion JS Bitwise JS RegExp JS Errors JS Debugging JS Hoisting JS Strict Mode JS this Keyword JS Style Guide JS Best Practices JS Mistakes JS Performance JS Reserved Words JS Versions JS Version ES5 JS Version ES6 JS JSON

JS Forms

JS Forms Forms API

JS Objects

Object Definitions Object Properties Object Methods Object Constructors Object Prototypes

JS Functions

Function Definitions Function Parameters Function Invocation Function Call Function Apply Function Closures

JS HTML DOM

DOM Intro DOM Methods DOM Document DOM Elements DOM HTML DOM CSS DOM Animations DOM Events DOM Event Listener DOM Navigation DOM Nodes DOM Collections DOM Node Lists

JS Browser BOM

JS Window JS Screen JS Location JS History JS Navigator JS Popup Alert JS Timing JS Cookies

JS AJAX

AJAX Intro AJAX XMLHttp AJAX Request AJAX Response AJAX XML File AJAX PHP AJAX ASP AJAX Database AJAX Applications

JS JSON

JSON Intro JSON Syntax JSON vs XML JSON Data Types JSON Objects JSON Arrays JSON Parse JSON Stringify JSON PHP JSON HTML JSON JSONP

JS References

JavaScript Objects HTML DOM Objects


JavaScript Битовые операции


Побитовые операторы JavaScript

Оператор Имя Описание
& AND Устанавливает каждый бит 1, если оба бита 1
| OR Задает каждый бит 1, если один из двух битов 1
^ XOR Задает каждый бит 1, если только один из двух битов 1
~ NOT Переворачивает все биты
<< Zero fill left shift Сдвиги влево путем нажатия нулей в справа и пусть левый бит упасть
>> Signed right shift Сдвиг вправо путем нажатия копий левого бита слева, и пусть крайние правая биты падают
>>> Zero fill right shift Сдвиг вправо путем нажатия нулей в слева, и пусть правый биты падать

Примеры

Операции Результат Same as Результат
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 использует битовые операнды 32 бит

JavaScript хранит числа в виде чисел с плавающей запятой в 64 бит, но все битовые операции выполняются с двоичными номерами 32 бит.

До выполнения побитовой операции JavaScript преобразует числа в 32 битов со знаком целых чисел.

После выполнения побитовой операции результат преобразуется обратно в числа JavaScript 64 бит.

В приведенных выше примерах используются 4 бита неподписанных двоичных чисел. Из-за этого ~ 5 возвращает 10.

Поскольку JavaScript использует 32 битов со знаком целых чисел, он не вернет 10. Он вернется-6.

00000000000000000000000000000101 (5)

11111111111111111111111111111010 (~ 5 =-6)

Целое число со знаком использует крайний левый бит в качестве знака минуса.



Побитовое и

При побитовой и выполняется на пару битов, он возвращает 1, если оба бита 1.

One bit example:
OperationResult
0 & 00
0 & 10
1 & 00
1 & 11
4 bits example:
OperationResult
1111 & 00000000
1111 & 00010001
1111 & 00100010
1111 & 01000100

Побитовое или

При побитовой или выполняется на пару битов, он возвращает 1, если один из битов 1:

One bit example:
OperationResult
0 | 00
0 | 1
1 | 01
1 | 11
4 bits example:
OperationResult
1111 | 00001111
1111 | 00011111
1111 | 00101111
1111 | 01001111

Побитовое исключающее

Если битовое исключающее значение выполняется на паре битов, оно возвращает 1, если биты различаются:

One bit example:
OperationResult
0 ^ 00
0 ^ 1
1 ^ 01
1 ^ 1
4 bits example:
OperationResult
1111 ^ 00001111
1111 ^ 00011110
1111 ^ 00101101
1111 ^ 01001011

Побитовое и (&) JavaScript

Побитовое и возвращает 1, только если оба бита 1:

ДесятичныхДвоичном
500000000000000000000000000000101
100000000000000000000000000000001
5 & 100000000000000000000000000000001 (1)

Пример

var x = 5 & 1;

JavaScript побитовое или (|)

Побитовое или возвращает 1, если один из битов 1:

ДесятичныхДвоичном
500000000000000000000000000000101
100000000000000000000000000000001
5 | 100000000000000000000000000000101 (5)

Пример

var x = 5 | 1;

JavaScript побитовое исключающее (^)

Побитовое исключающее возвращает 1, если биты различаются:

ДесятичныхДвоичном
500000000000000000000000000000101
100000000000000000000000000000001
5 ^ 100000000000000000000000000000100 (4)

Пример

var x = 5 ^ 1;

JavaScript побитовое не (~)

ДесятичныхДвоичном
500000000000000000000000000000101
~511111111111111111111111111111010 (-6)

Пример

var x = ~5;

JavaScript (нулевой заливки) побитовый левый сдвиг (<<)

Это нулевой заливки влево сдвига. Один или несколько нулевых битов помещаются с правой стороны, и крайние левые биты падают:

ДесятичныхДвоичном
500000000000000000000000000000101
5 <<100000000000000000000000000001010 (10)

Пример

var x = 5 <<1;

JavaScript (сохранение знака) побитовый правый сдвиг (>>)

Это знак, сохраняющий право смены. Копии крайнего левого бита помещаются слева, а крайние справа биты падают:

ДесятичныхДвоичном
-511111111111111111111111111111011
-5>> 111111111111111111111111111111101 (-3)

Пример

var x = -5>> 1;

JavaScript (нулевой заливки) правый сдвиг (>>>)

Это нулевой правый сдвиг. Один или несколько нулевых битов помещаются слева, и крайние справа биты падают:

ДесятичныхДвоичном
500000000000000000000000000000101
5>>> 100000000000000000000000000000010 (2)

Пример

var x = 5>>> 1;

Двоичные числа

Двоичные числа с только один бит набор легко понять:

Двоичное представлениеДесятичное значение
000000000000000000000000000000011
000000000000000000000000000000102
000000000000000000000000000001004
000000000000000000000000000010008
0000000000000000000000000001000016
0000000000000000000000000010000032
0000000000000000000000000100000064

Установка нескольких битов показывает двоичный шаблон:

Двоичное представлениеДесятичное значение
000000000000000000000000000001015 (4 + 1)
0000000000000000000000000000110113 (8 + 4 + 1)
0000000000000000000000000010110145 (32 + 8 + 4 + 1)

Двоичные номера JavaScript хранятся в формате дополнения 2.

Это означает, что отрицательное число является битовым не числа плюс 1:

Двоичное представлениеДесятичное значение
000000000000000000000000000001015
11111111111111111111111111111011-5
000000000000000000000000000001106
11111111111111111111111111111010-6
0000000000000000000000000010100040
11111111111111111111111111011000-40

Преобразование десятичной дроби в двоичный

Пример

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

Преобразование двоичного в десятичное

Пример

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