Почему компьютеры считают двойками, а не десятками
У тебя десять пальцев, и считать десятками кажется самой логичной идеей на свете. А компьютер упрямо знает только два числа — ноль и единицу. Почему он выбрал именно такую скупую арифметику и при этом обыгрывает тебя в любых вычислениях?
У тебя десять пальцев, поэтому считать десятками кажется самой естественной вещью на свете. А компьютер всю жизнь обходится двумя числами — нулём и единицей. Почему машина выбрала такую скупую арифметику и при этом считает в миллиарды раз быстрее тебя? Сейчас разберёмся, и окажется, что дело вовсе не в математике, а в электричестве.
Десятки — это про пальцы, а не про вселенную
Мы считаем десятками просто потому, что у нас десять пальцев. Это исторический случай, а не закон природы. Если бы у людей было по восемь пальцев, мы бы спокойно жили в восьмеричном мире и даже не замечали подвоха. Десятичная система удобна нам — но она ничем не священна.
Любую систему счисления можно представить как набор разрядов, где каждый следующий в несколько раз больше предыдущего. В десятичной системе шаг — десять: единицы, десятки, сотни, тысячи. Число 365 — это три сотни, шесть десятков и пять единиц. В двоичной системе шаг всего два: единицы, двойки, четвёрки, восьмёрки, шестнадцать и так далее. То же число 365 в двоичном виде выглядит как 101101101 — длинно, зато с использованием только двух цифр.
Так вот, главный вопрос не в том, можно ли считать двойками. Можно, и легко. Вопрос в том, почему компьютеру это удобнее, чем нам.
Внутри компьютера живёт электричество
Компьютер не понимает цифр в нашем смысле. Внутри него бегает ток, и единственное, что машина умеет надёжно различать — это есть напряжение или нет. Лампочка горит или не горит. Есть сигнал или тишина. Два состояния — и всё.
Представь огромный зал, заполненный миллиардами крошечных выключателей. Каждый может быть либо включён, либо выключен. Эти выключатели называются транзисторами, и в современном процессоре их десятки миллиардов. Включён — будем считать это единицей. Выключен — ноль. Вот и вся азбука компьютера.
Компьютер считает двойками не потому, что так умнее, а потому, что у электричества от природы всего два чётких состояния: течёт ток или не течёт.
Теперь представь, что мы захотели бы заставить машину считать десятками напрямую. Пришлось бы научить каждый элемент различать не два, а десять разных уровней напряжения: вот это ноль, это единица, это двойка, и так до девятки. И тут начинается беда.
Почему два надёжнее десяти
Вообрази, что ты разговариваешь с другом на шумной улице. Если вы договорились о двух сигналах — рука поднята или опущена — вы никогда не перепутаете. Разница огромная, её видно за версту. А теперь попробуй различить десять положений руки: чуть выше, чуть ниже, под углом сорок градусов... В шуме и спешке вы тут же начнёте ошибаться.
С электричеством то же самое. Напряжение постоянно слегка дрожит: мешают помехи, нагрев, соседние провода. Если у тебя всего два состояния — ноль около нуля вольт и единица около, скажем, одного вольта — то даже заметные колебания не страшны. Чуть просело, чуть подскочило — всё равно понятно, где ноль, а где единица. Запас огромный.
А вот если втиснуть десять уровней в тот же диапазон, расстояние между соседними станет крошечным. Малейшая помеха — и шестёрка превратится в семёрку, а вычисление развалится. Поэтому инженеры выбрали самое надёжное, что есть: два состояния с гигантским запасом прочности.
- Два состояния — легко различить даже при помехах, простые и дешёвые детали.
- Десять состояний — нужна сверхточная электроника, дорого и ненадёжно.
Логика тоже любит двойку
Есть и вторая причина, не менее красивая. Двоичные числа идеально дружат с логикой. Ноль и единицу можно читать не только как числа, но и как «нет» и «да», как «ложь» и «истина».
Из таких «да» и «нет» собираются крошечные логические элементы — их называют логическими вентилями. Один проверяет: «оба сигнала единицы?». Другой: «хотя бы один?». Третий просто переворачивает ноль в единицу. Соединяя миллионы таких элементов, инженеры строят всё: сложение чисел, сравнение, память, целые программы. Получается, что и арифметика, и логика говорят на одном языке из нулей и единиц. Один набор деталей — две работы сразу.
А ещё двойка отлично складывается с разрядами. Добавил один бит — и количество возможных значений удвоилось: один бит это 2 варианта, два бита — 4, три — 8, восемь бит — уже 256. Каждый такой ноль или единица называется битом, а восемь битов вместе — байтом. Из этих кирпичиков собрано всё: твои фотографии, музыка, сообщения и эта самая статья.
Так двойки — это слабость или сила?
На первый взгляд кажется, что машина бедна: всего две цифры против наших десяти. Но именно эта простота и делает компьютер таким быстрым и надёжным. Чем проще базовый кирпичик, тем легче сделать его крошечным, дешёвым и собрать в немыслимых количествах.
Машине не нужно красиво считать так, как удобно тебе. Ей нужно считать безошибочно и миллиарды раз в секунду. И тут два честных состояния — ток есть или тока нет — побеждают любую более «умную» систему. Десятки остались людям, с их десятью пальцами. А компьютеры выбрали двойки — и не прогадали.