Калькулятор систем счисления
Результат
Результат
- Десятичное
- 17
- Остаток
- 0
Система счисления — это правило, по которому строка цифр превращается в значение: каждая цифра умножается на основание в степени своей позиции, отсчёт идёт от нуля справа, а результаты складываются. Двоичная система оставляет всего две цифры, 0 и 1, и каждый шаг влево удваивает вес: 1011 — это 1×8 + 0×4 + 1×2 + 1×1, то есть 11. Шестнадцатеричная система идёт от 0 до 9, а дальше от A до F, и каждый шаг влево умножает на 16: FF — это 15×16 + 15, то есть 255. На этой странице основание системы счисления выбирается любое, от 2 до 36, и в нём можно складывать, вычитать, умножать и делить. Основание — не другой вид числа, а другой способ записать те же числа, поэтому ответ печатается сразу в двух чтениях. 1011 плюс 110 в двоичной системе даёт 10001 — а это 11 плюс 6, то есть 17, и 17 записывается в двоичной системе как 10001. Обе строки говорят одно и то же; десятичная строка нужна тем, кто не считает в другой системе каждый день. Перед началом стоит знать три вещи. Цифрам больше девяти нужны знаки, и по давней договорённости буквы от A до Z обозначают десять–тридцать пять: именно поэтому 36 — самая большая система, которую можно набрать на клавиатуре. Цифра допустима только тогда, когда она меньше основания, поэтому 2 — не цифра в двоичной системе, и 1012 — не двоичное число, хотя выглядит похоже. И само основание не входит в ответ: 10001 означает семнадцать только потому, что вы сказали «основание два», так что страница печатает цифры, а основание остаётся в выбранном поле. Арифметика здесь обычная — меняется только запись. При сложении перенос возникает, когда разряд достигает основания, а не десяти, поэтому FF плюс 1 сворачивается в 100, а не останавливается на FG: буквы G нет, шестнадцать — не цифра. Деление — то место, где арифметика в другой системе окупается: одно число делится на другое с частным и остатком, и оба печатаются в выбранной системе. Строка остатка показывается всегда. При сложении, вычитании и умножении там стоит 0, потому что «ничего не осталось» и «остаток равен нулю» для целых чисел — одно и то же утверждение. Вычитание может уйти ниже нуля, и тогда у ответа появляется минус, записанный обычным образом: знак не входит в набор цифр.
Число 255 в системах счисления 2, 8, 10 и 16 — с разложением по разрядам
| Основание | Запись в этой системе | Сумма по разрядам |
|---|---|---|
| 2 | 11111111 | 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 |
| 8 | 377 | 3×64 + 7×8 + 7 |
| 10 | 255 | 2×100 + 5×10 + 5 |
| 16 | FF | 15×16 + 15 |
Читайте средний столбец сверху вниз — одно и то же значение предстаёт в четырёх записях: 11111111, 377, 255 и FF. Между строками не изменилось ничего, кроме символов и размера шага. Третий столбец — это арифметика, которая возвращает каждую запись к 255: в двоичной системе восемь единиц, поэтому появляются все степени от 128 до 1; в шестнадцатеричной цифр всего две, но первая умножается на 16, а не на 2. Обратите внимание, как падает ширина записи с ростом основания. Двоичной системе, чтобы сказать 255, нужно восемь цифр, восьмеричной — три, десятичной — три, шестнадцатеричной — две: большее основание говорит то же значение меньшим числом позиций, потому что каждая позиция стоит дороже. На этом обмене и держится смысл оснований: шестнадцатеричную систему применяют для байтов не потому, что она математически особенная, а потому, что две её цифры покрывают ровно один байт, а двоичную — на уровень ниже, потому что провод, который может быть только включён или выключен, имеет ровно два состояния. Таблица не следует за введёнными числами: на них отвечает панель выше, а здесь показано одно значение в четырёх записях.
Формула
1011 + 110 = 10001 в двоичной системе, а 11 + 6 = 17 в десятичной ⇒ 10001 — это 17: одно значение в двух записях
- b
- Основание — целое число от 2 до 36. Это обычное числовое поле, а не список из тридцати пяти вариантов, поэтому границы проверяются на самом поле: 1 и 37 отклоняются ещё до начала вычисления. Система с основанием 1 невозможна: одной цифрой дальше нуля не уедешь. А для основания 37 понадобился бы тридцать седьмой символ, которого нет ни на одной клавиатуре
- 1011
- Одиннадцать, записанное в двоичной системе: 1×8 + 0×4 + 1×2 + 1×1. Читайте справа налево — в эту сторону растут степени. То же одиннадцать в десятичной системе — 11, в восьмеричной — 13, в шестнадцатеричной — B
- 10001
- Ответ на 1011 + 110, всё ещё в двоичной системе: 1×16 + 0×8 + 0×4 + 0×2 + 1×1, то есть 17. По дороге случились два переноса — разряд единиц дошёл до 2 и разряд четвёрок дошёл до 2, — и каждый перенос сдвинул единицу на позицию влево, точно так же, как перенос в десятичной системе сдвигает её при достижении десяти
- FF
- Пятнадцать умножить на шестнадцать плюс пятнадцать, то есть 255. Шестнадцатеричная система — та, в которую ровно укладывается байт: две её цифры покрывают все значения от 0 до 255, поэтому она появляется везде, где появляются байты. A–F — это шесть цифр после девятки
- 17 ÷ 5 = 3, остаток 2
- Деление, записанное целиком. В двоичной системе то же деление выглядит как 10001 ÷ 101 = 11, остаток 10, и страница печатает частное как результат, а остаток — отдельной строкой. Остаток всегда меньше делителя: именно это делает его остатком, а не дробью
- от A до Z
- Двадцать шесть дополнительных цифр, которые доводят десятичную систему до тридцать шестой. A — это десять, B — одиннадцать, Z — тридцать пять. Большие и маленькие буквы работают одинаково, а печатаются всегда большие
Читать значение из системы, которая говорит на другом основании, — повседневный случай. Дамп памяти печатает байты парами шестнадцатеричных цифр, права доступа к файлу показываются как 755, потому что каждая из трёх цифр упаковывает три бита, маска подсети — это четыре группы по восемь бит, а адрес IPv6 целиком шестнадцатеричный. В каждом из этих случаев нужно не десятичное значение, а та запись, которую видит машина. Запись в те же системы — зеркальный случай: выставить битовый образ регистра, собрать цвет из байтов красного, зелёного и синего или разобраться, почему сдвинутое значение вышло отрицательным, — всё это арифметика в системе, где основание не десять. В учёбе арифметику по основаниям преподают как то, что показывает: позиционная запись — это выбор, а не факт, и упражнения там ровно такие, как на этой странице: перенос в двоичной, заём в восьмеричной и проверка, что одна и та же операция даёт один и тот же ответ в любой системе, если читать обе стороны в одной. Четвёртое применение — проверять себя: если 1011 плюс 110 в двоичной системе даёт не 17 в десятичной, то одно из двух чтений неверно, и именно наличие обеих строк делает такую проверку возможной. Когда основание равно 2 или 16, есть страницы, которые идут глубже: калькуляторы для двоичной и шестнадцатеричной систем — это та же арифметика с уже подставленным основанием, а конвертеры переводят значение из системы в систему без операции между ними.
Разобранные примеры
Сложение в двоичной системе: 1011 + 110
- Переведите оба операнда в десятичную, чтобы понимать, что складываете: 1011 — это 11, а 110 — это 6
- 11 + 6 = 17
- Запишите 17 в двоичной системе: 17 = 16 + 1, значит цифры идут 1 0 0 0 1
- Ответ в двоичной системе — 10001, а десятичная строка подтверждает: это 17
Ввод по умолчанию — и тот же пример, который таблица ниже разбирает в другом основании. Сложение двух строк по столбцам даёт тот же ответ: 1 + 0 = 1, 1 + 1 = 0 и 1 в переносе, дальше 0 + 1 плюс перенос снова даёт 0 и 1 в переносе, а последний перенос занимает новую позицию слева. Перенос при достижении двойки — это и есть всё сложение в двоичной системе; именно из-за переносов 10001 занимает пять позиций, когда в операндах было четыре и три.
Перенос через последнюю цифру: FF + 1 в шестнадцатеричной системе
- FF — это 15×16 + 15 = 240 + 15 = 255
- Прибавляем 1 — получаем 256
- Запишите 256 в шестнадцатеричной системе: 256 = 1×256 + 0×16 + 0, значит цифры идут 1 0 0
- Ответ — 100 в шестнадцатеричной системе, то есть 256, а не сто
Ловушка, ради которой этот пример и существует: 100 — маленькое число в десятичной системе и куда большее в шестнадцатеричной. Разбор по столбцам показывает, откуда берётся такая ширина: F плюс 1 даёт шестнадцать, а шестнадцать — не цифра в шестнадцатеричной системе, поэтому происходит перенос и остаётся 0, а перенесённая единица попадает на полную F, и перенос случается снова. Одно сложение сдвинуло ответ на две позиции вверх. Это то же событие, что 99 + 1 = 100 в десятичной системе, и именно поэтому байту, переходящему с 255 на 256, нужен второй байт.
Деление с остатком: 1011 ÷ 10 в двоичной системе
- 1011 — это 11, а 10 — это 2
- 11 ÷ 2 = 5, остаток 1
- Запишите 5 в двоичной системе: 5 = 4 + 1, значит цифры идут 1 0 1
- Частное — 101, а в строке остатка стоит 1; 101 — это 5, что подтверждает десятичная строка
Единственная из четырёх операций, у которой остаток не равен нулю, — поэтому строка остатка на странице вообще есть. Обратите внимание, что частное здесь только целая часть: 11, делённое на 2, равно 5,5, а страница печатает 101 с остатком 1, а не 10,1 или 101,1, потому что остаток удерживает ответ в целых числах — половина сидит в этой единице. Проверка: 5 × 2 + 1 = 11, и она выполняется в любом основании.
Ограничения
Основание должно быть целым числом от 2 до 36. Основание 1 невозможно: единственная допустимая цифра в нём — 0, и дальше нуля не уедешь, — а для основания 37 понадобился бы тридцать седьмой символ; поле отклоняет и то, и другое ещё до начала вычисления. Дроби и десятичные отбрасываются не округлением, а отказом, как и минус перед операндом: страница разбирает цифры, а знак или точка — не цифра. Слишком большая для выбранного основания цифра — отдельный случай, и о том, как он обрабатывается, стоит сказать прямо. Наберите 1012 при основании 2, и вы получите общую ошибку вычисления, а не сообщение с указанием провинившейся цифры. Это осознанный размен, а не недосмотр: проверке на поле ввода передают строку и больше ничего, поэтому она не может прочитать поле основания рядом с собой, и честных вариантов было два — принимать любую строку цифр, которая могла бы быть законной хоть в каком-нибудь основании, или принимать вообще что угодно. Страница выбрала первый. Практическое следствие: поле остаётся чистым, а ошибка появляется в панели результатов — ответ никогда не бывает неверным, он просто объяснён хуже. Оба операнда ограничены шестьюдесятью символами и наибольшим целым числом, которое двойная точность хранит точно, — 9 007 199 254 740 991; это 16 цифр в десятичной записи и 53 в двоичной. Ответ подчиняется тому же потолку: он вычисляется точно, а затем проверяется, поэтому операция, результат которой уходит за границу, отклоняется, а не печатается округлённым. Буквы можно набирать в любом регистре, а печатаются они заглавными, так что ff и FF — один и тот же ввод. Ведущие нули принимаются и игнорируются: 00001011 и 1011 — одно и то же число, и обе записи печатаются как 1011. Таблица ниже зафиксирована на 255 в системах 2, 8, 10 и 16 и не следует за введёнными числами: на ваши числа отвечает панель, а таблица показывает четыре записи одного значения рядом.
Частые вопросы
- Как складывать два числа в системе, отличной от десятичной?
- Складывайте по столбцам справа налево, точно как в десятичной, но перенос делайте тогда, когда столбец достигает основания, а не десяти. В двоичной системе порог переноса один — 2: 1 + 1 даёт 0 и 1 в переносе. Поэтому 1011 + 110 = 10001: столбец двоек и столбец четвёрок переполнились и вытолкнули единицу в следующую позицию. Если следить за переносами не хочется, переведите оба операнда в десятичную, посчитайте там и переведите обратно — десятичная строка на этой странице показывает ровно это, и ответ всегда совпадёт.
- Почему 1012 не проходит при основании 2?
- Потому что 2 не является цифрой в двоичной системе: цифры там только 0 и 1. Правило такое — цифра должна быть меньше основания, поэтому в системе с основанием 2 допустимы 0 и 1, в восьмеричной от 0 до 7, в десятичной от 0 до 9, а в шестнадцатеричной от 0 до 9 и от A до F. Вы увидите это как общую ошибку вычисления, а не как сообщение с указанием цифры, и это известная шероховатость: проверка на поле ввода видит только набранную строку, но не выбранное основание, поэтому она принимает любую строку цифр, которая могла бы быть законной хоть в каком-то основании, а проверку по основанию оставляет вычислению. Ответ при этом никогда не бывает неверным — объяснение просто тоньше, чем хотелось бы.
- Какие основания доступны и почему список кончается на 36?
- Любое целое от 2 до 36. Потолок задаёт клавиатура, а не математика: цифрам больше девяти нужны знаки, привычные знаки — буквы от A до Z, а их двадцать шесть; десять плюс двадцать шесть будет тридцать шесть. Основание 1 невозможно по другой причине: одной цифрой не записать ничего больше нуля, потому что каждая позиция стоила бы 1 и добраться до 2 было бы нечем.
- 100 в шестнадцатеричной системе — это сто?
- Нет, и ради этой ошибки на странице есть второй пример. В шестнадцатеричной системе 100 означает 1×256 + 0×16 + 0, то есть 256. Символы те же, но каждая позиция стоит в шестнадцать раз дороже, а не в десять, поэтому три одинаковых знака обозначают другое значение. Десятичная строка на странице нужна именно для того, чтобы никогда не приходилось угадывать, какое чтение имеется в виду.
- Почему остаток показывается всегда, даже при сложении?
- Потому что для целых чисел «ничего не осталось» и «остаток равен нулю» — одно и то же утверждение, а строка, которая то появляется, то исчезает, читается хуже, чем строка, которая есть всегда. При сложении, вычитании и умножении там стоит 0. Ненулевой остаток даёт только деление, и там эта строка несёт ту часть, которая не разделилась нацело: 1011 ÷ 10 в двоичной системе оставляет 1 — это та половина от 11 ÷ 2, которую потеряло частное.
- Можно ли на этой странице считать в десятичной системе?
- Да, и это удобный способ проверить, что страница сходится с обычным калькулятором: поставьте основание 10, и всё будет вести себя ровно как ожидается, потому что цифры, переносы и формат ответа не меняются. Приобретаете вы строку остатка и явно указанное основание, а не теряете ничего. Соседние страницы идут другим путём — калькуляторы для двоичной и шестнадцатеричной систем делают ту же арифметику с уже подставленным основанием, а конвертеры переводят значение из одной системы в другую без операции между ними.
Источники
- Base — what a positional number system is, how the digits of a base b expansion are read, and why the base must be a whole number greater than 1 — Wolfram MathWorld (United States)
- Hexadecimal — the base-16 system, the six letters past nine, and the convention that makes two hex digits equal one byte — Wolfram MathWorld (United States)
- Binary — the base-2 system and the place values 1, 2, 4, 8 that its digits stand for — Wolfram MathWorld (United States)