САМОСТОЯТЕЛЬНОЕ ОБУЧЕНИЕ ДЛЯ ВЕБ РАЗРАБОТЧИКОВ
×

JS Учебник

JS Главная JS Введение JS Что? Где? Куда? JS Вывод JS Заявления JS Синтаксис JS Комментарии JS Переменные JS Операторы JS Арифметика JS Присваивания JS Типы данных JS Функции JS Объекты JS События JS Строки JS Методы строк JS Числа JS Методы чисел JS Массивы JS Методы массива JS Сортировка массива JS Итерация массива JS Объекты дат JS Формат дат JS Метод получения дат JS Метод набора дат JS Математические... JS Случайные числа JS Булевы JS Сравнение... JS Заявления if...else JS Заявление switch JS Цикл for JS Цикл while JS Заявление break... JS Преобразование... JS Битовые... JS Регулярные выражения JS Ошибки JS Область JS Подъемный JS Строгий JS Ключевое слово this JS Ключевое слово let JS Константы JS Функция стрелки JS Классы JS Отладчик JS Руководство стиля JS Практика JS Распространенные ошибки JS Эффективность JS Зарезервированные слова JS Версии JS Версия ES5 JS Версия ES6 JS Версия 2016 JS Версия 2017 JS JSON

JS Формы

JS Формы JS Формы API

JS Объекты

Определение объекта Свойства объекта Методы объекта Отображение объекта Доступ к объекту Конструкторы объекта Прототипы объекта ES5 Методы объекта

JS Функции

Определение функции Параметры функции Вызов функции Вызвать функцию Применение функции Закрытие функции

JS Прочее

Классы введение Наследование класса Статические методы... JS Обратный вызов JS Асинхронный JS Обещания JS Асинхронный синтаксис

JS HTML DOM

DOM Введение DOM Методы DOM Документы DOM Элементы DOM HTML DOM CSS DOM Анимация DOM События DOM Прослушиватель событий DOM Навигация DOM Узлы DOM Коллекция DOM Список узлов

JS Браузера BOM

JS Window JS Экран JS Расположение JS История JS Навигатор JS Предупреждение JS Синхронизация JS Cookies

JS AJAX

AJAX Введение AJAX XMLHttp AJAX Запрос на сервер AJAX Ответ с сервера AJAX XML Файл AJAX PHP Файл AJAX ASP Файл AJAX База данных AJAX Приложения AJAX Примеры

JS JSON

JSON Введение JSON Синтаксис JSON или XML JSON Типы данных JSON Парсинг JSON Строки JSON Объекты JSON Массивы JSON PHP JSON HTML JSON JSONP

JS Веб API

API - Введение API - История API - Хранилище API - Работник API - Извлечь файл API - Геолокации

JS или jQuery

jQuery HTML Селекторы jQuery HTML Элементы jQuery CSS Стили jQuery HTML DOM

JS Примеры

JS Примеры JS HTML DOM JS HTML Ввода JS HTML Объекты JS HTML События JS Браузер JS Редактор JS Упражнения JS Викторина JS Сертификат

JS Справочник

JavaScript Объекты HTML DOM Объекты


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



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

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

Примеры

Операция Результат Такой же, как Результат
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-битные целые числа со знаком.

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

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

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

00000000000000000000000000000101 (5)

11111111111111111111111111111010 (~5 = -6)

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



Побитовое AND JavaScript

Когда побитовое AND выполняется для пары битов, он возвращает 1, если оба бита равны 1.

Один битный пример:
ОперацияРезультат
0 & 00
0 & 10
1 & 00
1 & 11
4 битный пример:
ОперацияРезультат
1111 & 00000000
1111 & 00010001
1111 & 00100010
1111 & 01000100

Побитовое OR

Когда для пары битов выполняется побитовое OR, оно возвращает 1, если один из битов равен 1:

Один битный пример:
ОперацияРезультат
0 | 00
0 | 1
1 | 01
1 | 11
4 битный пример:
ОперацияРезультат
1111 | 00001111
1111 | 00011111
1111 | 00101111
1111 | 01001111

Побитовое XOR JavaScript

Когда побитовое XOR выполняется для пары битов, он возвращает 1, если биты различны:

Один битный пример:
ОперацияРезультат
0 ^ 00
0 ^ 1
1 ^ 01
1 ^ 1
4 битный пример:
ОперацияРезультат
1111 ^ 00001111
1111 ^ 00011110
1111 ^ 00101101
1111 ^ 01001011

Поразрядное AND (&) JavaScript

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

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

Пример

var x = 5 & 1;
Попробуйте сами »

Побитовое OR (|) JavaScript

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

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

Пример

var x = 5 | 1;
Попробуйте сами »

Побитовое XOR (^) JavaScript

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

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

Пример

var x = 5 ^ 1;
Попробуйте сами »

Побитовое NOT (~) 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 хранятся в формате дополнения до двух.

Это означает, что отрицательное число является побитовым NOT числа плюс 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);
}
Попробуйте сами »