Подключиться через MCP →

Введите расчет

Математическая формула

Реклама

Результатов

Результат сдвига
64
десятичное значение
Исходное число 16
Величина сдвига (биты) 2

Что такое битовый сдвиг?

Битовый сдвиг перемещает двоичные разряды целого числа влево или вправо на заданное количество позиций. Это базовая операция в программировании, низкоуровневой оптимизации, графике, хешировании и встраиваемых системах. Сдвиг влево (n << k) перемещает биты в сторону старшего разряда, заполняя освободившиеся позиции нулями, а сдвиг вправо (n >> k) — в сторону младшего разряда.

Ряд из 8 ячеек двоичных цифр со стрелками, показывающими движение битов влево и вправо
Битовый сдвиг перемещает каждый бит на фиксированное число позиций влево или вправо.

Как пользоваться калькулятором

Введите целое число n, величину сдвига k (в битах) и выберите направление. Калькулятор покажет результат в десятичном виде. Инструмент использует 64-битную знаковую целочисленную арифметику — так же, как и большинство языков программирования.

Разбор формулы

Каждый сдвиг влево на одну позицию удваивает число, поэтому сдвиг влево на k позиций равносилен умножению на 2k: $$\text{Result} = \text{Number (n)} \ll \text{Shift (k)} = n \times 2^{k}$$ Каждый сдвиг вправо на одну позицию делит число пополам с отбрасыванием дробной части, то есть сдвиг вправо на k — это целочисленное деление на 2k: $$\text{Result} = \text{Number (n)} \gg \text{Shift (k)} = \left\lfloor \frac{n}{2^{k}} \right\rfloor$$ Именно поэтому сдвиги выполняются на аппаратном уровне куда быстрее, чем умножение или деление.

Сдвиг влево на одну позицию: биты движутся влево, справа добавляется ноль; значение удваивается
Сдвиг влево на одну позицию удваивает значение, а сдвиг вправо уменьшает его вдвое.

Разбор примера

Возьмём \(n = 16\) и сдвиг влево на \(k = 2\). В двоичном виде 16 — это 10000. Сдвиг влево на две позиции добавляет два нуля: 1000000, то есть 64. По формуле: $$16 \times 2^{2} = 16 \times 4 = 64$$ В обратную сторону: $$64 \gg 2 = \left\lfloor \frac{64}{4} \right\rfloor = 16$$ — получаем исходное значение.

Частые вопросы

Может ли сдвиг влево привести к потере данных? Да — биты, вышедшие за пределы разрядности числа, отбрасываются (переполнение). В пределах 64 бит этот калькулятор сохраняет значение.

Что происходит с отрицательными числами при сдвиге вправо? Калькулятор выполняет арифметический (знаковый) сдвиг вправо, поэтому знаковый бит сохраняется, и отрицательные числа остаются отрицательными.

Зачем использовать сдвиги вместо умножения или деления? На большинстве процессоров битовые сдвиги выполняются за один такт, поэтому это самый быстрый способ умножить или разделить на степень двойки.

Справочная таблица степеней двойки

Сдвиг влево на \(k\) умножает число на \(2^k\); сдвиг вправо на \(k\) делит на \(2^k\) (отбрасывая остаток для целых чисел). Используйте эту таблицу для мгновенного определения множителя или делителя для заданного размера сдвига.

Сдвиг \(k\) \(2^k\) (десятичное) Значение \(\ll k\) / \(\gg k\)
0 1 без изменений
1 2 \(\times 2\) / \(\div 2\)
2 4 \(\times 4\) / \(\div 4\)
3 8 \(\times 8\) / \(\div 8\)
4 16 \(\times 16\)
5 32 \(\times 32\)
6 64 \(\times 64\)
7 128 \(\times 128\)
8 256 \(\times 256\) (1 байт)
9 512 \(\times 512\)
10 1,024 \(\times 1024\) (1 КиБ)
11 2,048 \(\times 2048\)
12 4,096 \(\times 4096\)
13 8,192 \(\times 8192\)
14 16,384 \(\times 16384\)
15 32,768 \(\times 32768\)
16 65,536 \(\times 65536\) (2 байта)
17 131,072
18 262,144
19 524,288
20 1,048,576 \(\times\) 1 МиБ
32 4,294,967,296 граница 32-бит
63 9,223,372,036,854,775,808 старший бит 64-битного целого числа со знаком
Последнее обновление: