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

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 Сравнение... JS Заявления if...else JS Заявление switch JS Цикл for JS Цикл while JS Заявление break... JS Преобразование... JS Битовые... JS Регулярные выражения JS Ошибки JS Отладчик JS Подъемный JS Строгий JS Ключевое слово this JS Руководство стиля JS Практика JS Распространенные ошибки JS Эффективность JS Зарезервированные слова JS Версии JS Версия ES5 JS Версия ES6 JS JSON

JS Формы

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

JS Объекты

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

JS Функции

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

JS HTML DOM

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

JS Браузера BOM

JS Окно 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



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



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

Оператор Название Описание
& И Устанавливает каждый бит в 1, если оба бита равны 1
| ИЛИ Устанавливает каждый бит в 1, если один из двух битов равен 1
^ Исключающее ИЛИ Устанавливает каждый бит в 1, если только один из двух битов равен 1
~ НЕ Инвертирует все биты
<< Ноль заполнить левый сдвиг Сдвигает влево, нажимая нули справа, и пусть самые левые биты отключаются
>> Знаковый сдвиг вправо Сдвигает вправо, нажимая копии самого левого бита слева, и пусть самые правые биты отключаются
>>> Нулевой сдвиг вправо с заполнением Сдвигает вправо, нажимая нули слева, и пусть самые правые биты отключаются

Примеры

Операция Результат Так же, как Результат
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)

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


Битовый И

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

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

Битовый ИЛИ

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

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

Битовый исключающее ИЛИ

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

Одно битовый пример:
ОперацияРезультат
0 ^ 00
0 ^ 1
1 ^ 01
1 ^ 1
Четырех битовый пример:
ОперацияРезультат
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 двоичные числа хранятся в формате высокой четкости.

Это означает, что отрицательное число является побитовым НЕ числа плюс 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);
}
Редактор кода »