Spec-Zone.ru › JavaScript

Левый сдвиг (<<)

Базовая поддержка Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.

Оператор **левого сдвига (<<)** возвращает число или BigInt, чье двоичное представление является первым операндом, сдвинутым на указанное количество битов влево. Лишние биты, сдвинутые влево, отбрасываются, а нулевые биты сдвигаются справа.

Попробовать

const a = 5; // 00000000000000000000000000000101
const b = 2; // 00000000000000000000000000000010

console.log(a << b); // 00000000000000000000000000010100
// Expected output: 20

Синтаксис

x << y

Описание

Оператор << перегружен для двух типов операндов: number и BigInt. Для чисел оператор возвращает 32-битное целое число. Для BigInts оператор возвращает BigInt. Сначала он приводит оба операнда к числовым значениям и проверяет их типы. Он выполняет левый сдвиг BigInt, если оба операнда становятся BigInt; в противном случае он преобразует оба операнда в 32-битные целые числа и выполняет левый сдвиг числа. Генерируется TypeError, если один операнд становится BigInt, а другой — числом.

Оператор работает с битовым представлением левого операнда в дополнительном коде. Например, 9 << 2 дает 36:

     9 (base 10): 00000000000000000000000000001001 (base 2)
                  --------------------------------
9 << 2 (base 10): 00000000000000000000000000100100 (base 2) = 36 (base 10)

Побитовый сдвиг 32-битного целого числа x влево на y битов дает x * 2 ** y. Так, например, 9 << 3 эквивалентно 9 * (2 ** 3) = 9 * (8) = 72.

Если левый операнд — число, содержащее более 32 битов, его наиболее значимые биты будут отброшены. Например, следующее целое число с более чем 32 битами будет преобразовано в 32-битное целое число:

Before: 11100110111110100000000000000110000000000001
After:              10100000000000000110000000000001

Правый операнд будет преобразован в беззнаковое 32-битное целое число, а затем будет взят по модулю 32, так что фактическое смещение сдвига всегда будет положительным целым числом в диапазоне от 0 до 31 включительно. Например, 100 << 32 то же самое, что и 100 << 0 (и дает 100), поскольку 32 по модулю 32 равно 0.

Предупреждение: Вы можете увидеть, как люди используют << 0 для усечения чисел до целых. Левый сдвиг любого числа x на 0 возвращает x, преобразованное в 32-битное целое число, которое дополнительно удаляет начальные биты для чисел вне диапазона от -2147483648 до 2147483647. Используйте Math.trunc() вместо этого.

Для BigInts усечения не происходит. Концептуально, положительные BigInts имеют бесконечное число ведущих 0 битов, а отрицательные BigInts имеют бесконечное число ведущих 1 битов.

Примеры

Использование левого сдвига

9 << 3; // 72

// 9 * (2 ** 3) = 9 * (8) = 72

9n << 3n; // 72n

Спецификации

Спецификация
ECMAScript® 2027 Language Specification
# sec-left-shift-operator

Совместимость с браузерами

Настольные Мобильные Сервер
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS Bun Deno Node.js
left_shift
1
12
1
3
1
18
4
10.1
1
1.0
4.4
1
1.0.0
1.0
0.10.0

Смотрите также

  • Побитовые операторы в руководстве по JS
  • Присваивание левого сдвига (<<=)

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Left_shift

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API