Системы счисления и битовые сдвиги
Переводит число между десятичной, шестнадцатеричной, восьмеричной и двоичной системами и показывает результат сдвига влево и вправо на N бит.
Результат
- Число в разных системах
Десятичная 255 Шестнадцатеричная FF Восьмеричная 377 Двоичная 1111 1111 - Длина двоичной записи без знака
- 8 бит
- Сдвиг влево (<<)
Десятичная 2040 Шестнадцатеричная 7F8 Восьмеричная 3770 Двоичная 0111 1111 1000 - Сдвиг вправо (>>)
Десятичная 31 Шестнадцатеричная 1F Восьмеричная 37 Двоичная 0001 1111
- Результат сдвига не обрезается до разрядности переменной: в 8- или 32-разрядном регистре старшие биты исчезли бы.
Формула
- x = Σ di · bi
- x << N = x · 2N
- x >> N = ⌊x / 2N⌋
Подробнее о расчёте
Как считается
Запись разбирается по выбранному основанию в целое число произвольной длины (BigInt), затем выводится в четырёх системах. Двоичная запись разбита на группы по 4 бита: каждая группа — одна шестнадцатеричная цифра. Сдвиг влево на N бит умножает число на 2N, сдвиг вправо делит нацело с округлением вниз.
Пример
255 = FF₁₆ = 377₈ = 1111 1111₂. Сдвиг влево на 3 бита даёт 2040 = 7F8₁₆, вправо — 31 = 1F₁₆. Число −5 в 8-битном дополнительном коде записывается как FB₁₆ = 1111 1011₂.
Что не учтено
- Только целые числа. Дробную часть и числа с плавающей точкой калькулятор не разбирает.
- Ввод — до 512 бит (около 154 десятичных цифр), сдвиг — до 256 бит.
- Результат сдвига не обрезается по разрядности: в языке C сдвиг переменной шириной 8 или 32 бита теряет старшие биты, а здесь они сохраняются.
- Сдвиг вправо отрицательных чисел арифметический; в стандарте C его поведение определяется реализацией.
Источники
- Д. Кнут, «Искусство программирования», т. 2 «Получисленные алгоритмы», разд. 4.1 «Позиционные системы счисления», 3-е изд., Addison-Wesley, 1997 год.
- ISO/IEC 9899:2024 (язык C, C23), п. 6.5.8 «Операции побитового сдвига»: сдвиг влево на N бит умножает на 2^N, а сдвиг вправо отрицательного значения определяется реализацией; здесь выбран арифметический сдвиг.
Обновлено 08.11.2026.