Двоичный калькулятор из бусин и палок
easy

Двоичный калькулятор из бусин и палок

Выглядит странно, но при этом всё работает

Можно ли создать автоматическую счётную машину, если у вас есть только бусины и палки? Да, можно.

На наш друг Эван из YouTube провёл такой опыт и получил интересный результат: он создал механическую счётную машину, которая работает как обычный цифровой калькулятор, но при этом не требуют ни электричества, ни микрочипов. Всё работает благодаря гравитации и двоичной логике. 

Если вы понимаете по-английски, смотрите видео. Если нет — читайте наш разбор.

В чём идея

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

Все алгоритмы основаны на логических операциях: И, ИЛИ, НЕ и др. Если взять два числа в двоичном коде и прогнать каждый их бит через последовательность логических операций, то на выходе получится, например, сумма. Соль в том, чтобы правильно соединить между собой логические операции. 

В обычной жизни логические операции исполняют транзисторные полупроводники. Представьте, что это трубы и краны, только не для воды, а для электричества. И электричество, которое «вытекает» из одного крана, может управлять открытием или закрытием другого крана. 

Если много-много раз правильным образом соединить эти полупроводниковые «краны», получится калькулятор. 

Мы об этом подробно рассказывали в цикле статей про сумматоры

Что новенького

Эван решил сделать калькулятор на той же логической базе, что и настоящие калькуляторы, но с одним отличием: вместо тока и полупроводников он использует бусины и силу гравитации. Бусинки падают вниз, катятся, задевают какие-то стены, отодвигают что-то на своём пути и так далее. При этом такой калькулятор работает как нужно: числа считаются и все логически элементы работают правильно.

🤔 Зачем это нужно? Да просто так.

Двоичная логика

Самые простые состояния в логике — ДА и НЕТ. Их два, поэтому такая логика, где используются только два состояния, называется двоичной. Мы уже разбирали, как устроена двоичная логика и почему она используется для всех вычислений в компьютере.

В транзисторах ДА обозначается единицей и наличием тока в проводнике, а НЕТ — нулём и отсутствием тока. Так как у нас вместо тока бусинки, то правила будут такие:

1 = есть бусинка

0 = нет бусинки

Этого нам хватит, чтобы сделать логические элементы. Чтобы работать с числами, мы просто будем переводить их в двоичную систему счисления и смотреть, в каком порядке ставить бусинки и пустоту между ними.

Например, вот как в двоичном представлении будет выглядеть число 5:

Двоичный калькулятор из бусин и палок
Колонны — это трубы, в которые будут падать бусинки.

А вот как запишется число 12:

Двоичный калькулятор из бусин и палок

🤔 Если не понимаете, почему цифры стоят именно в этих местах, — прочитайте статью про двоичное счисление, там всё хорошо объяснено. 

Логическое И

Первое, что делаем, — реализуем логическое И. Если забыли, что это такое, — почитайте в статье про транзисторы, а пока вот короткая справка:

На вход поступает два сигнала. Логическое И выдаёт в результате единицу, только если на вход поступило сразу две единицы. Если хотя бы один из них ноль — будет ноль.

Так как у нас бусинки, то на входе и выходе тоже будут бусинки. Первая версия элемента, которую сделал Эван, выглядела так:

Двоичный калькулятор из бусин и палок

Логика была такая: падают две бусинки, одна закрывает ямку, вторая перекатывается и передаёт сигнал дальше. Если бусинка будет одна, то она застрянет в лунке и сигнал дальше не пойдёт.

Но такая реализация оказалась ненадёжной:

Двоичный калькулятор из бусин и палок

Эван модернизировал элемент, добавив в него розовые подвижные части — в зависимости от положения бусинок они сдвигались, освобождая итоговую бусинку:

Двоичный калькулятор из бусин и палок

Отлично, попробуем так же реализовать остальные элементы.

Логическое ИЛИ

ИЛИ отличается от И тем, что на входе достаточно хотя бы одной единицы, чтобы на выходе тоже получилась единица. Ноль в логическом ИЛИ возвращается только тогда, когда на входе всё по нулям.

Это оказалось проще, чем И, — достаточно, чтобы в трубу попала хотя бы одна бусинка, которая вытолкнет итоговую:

Двоичный калькулятор из бусин и палок

Логическое НЕ

А вот этот элемент придумать было сложнее: нужно, чтобы он запускал бусинку, когда на вход не попадало ничего. Но как это сделать на практике, как отследить отсутствие бусинки с точки зрения физики?

Выход Эван придумал такой: он сильно заранее запускает итоговую бусинку, которая медленно скатывается вниз. За это время по соседней трубе пролетит или не пролетит бусинка, которая закроет выход для итоговой. Если пролетит (на входе будет единица), то на выходе будет ноль, потому что выход будет закрыт. А если по трубе ничего не пролетит, то выход не закроется, и итоговая бусинка в конце концов доедет до выхода:

Двоичный калькулятор из бусин и палок

Удвоитель

Иногда нужно распараллелить сигнал, чтобы он пошёл сразу в обе точки. В электронике это сделать просто: делаем два провода в нужном месте, и электроны разбегаются в обоих направлениях. Но в механической логике так не получится, нужно идти на хитрость. Например, сделать развилку с дополнительной бусинкой:

Двоичный калькулятор из бусин и палок

Перенос бусинки наверх

Так как у нас всё завязано на гравитации и бусинках, то может понадобиться такое: итоговая бусинка вышла из какой-то части механизма, и её нужно отправить наверх, для запуска новых вычислений. Для этого Эван придумал виртуальный перенос бусинки — та, которая внизу, запускает ту, которая наверху:

Двоичный калькулятор из бусин и палок

Собираем калькулятор для двух бусинок

Чтобы проверить в деле всю предыдущую теорию, Эван собирает простой сумматор: он складывает два сигнала. Забегая чуть вперёд, Эван сразу предусматривает перенос разряда (carry).

Вот какая схема нужна для сложения двух сигналов на бусинках:

Двоичный калькулятор из бусин и палок

Отлично, у нас работает сложение двух сигналов, поэтому можно переходить к чему посложнее. Но сначала поговорим про перенос разряда.

Обрабатываем перенос разряда

Когда мы складываем обычные числа, например 19 и 7, то у нас иногда получается перенос единицы в новый разряд:

Двоичный калькулятор из бусин и палок

В двоичной системе счисления всё то же самое — разряды переносятся налево и складываются с теми числами, которые уже там стоят:

Двоичный калькулятор из бусин и палок

Чтобы сделать такой же перенос разряда и получить ноль после сложения двух единиц, добавим элемент XOR. Он возвращает ноль, если на входе было сразу две единицы или оба нуля, в противном случае он возвращает единицу. Именно так работает сложение с переносом в двоичной системе, а вот как это работает на бусинках:

Двоичный калькулятор из бусин и палок

Чтобы проверить работу элемента в деле и убедиться, что 1+1+1 будет давать 1 в сумме и 1 в новом разряде, Эван собирает основную схему сумматора:

Двоичный калькулятор из бусин и палок

Видно, что на выходе получилось 11: одна бусинка вышла в первом разряде, а вторая — в переносе (carry).

Если собрать три таких сумматора подряд, можно складывать трёхразрядные числа, например, 7 (111) и 5 (101):

Двоичный калькулятор из бусин и палок

Чтобы посмотреть на результат работы, посмотрите видео с отметки 7:35. Мы специально не будем портить интригу, чтобы вы сами оценили весь масштаб движения бусинок :-)

Текст и иллюстрации:

Михаил Полянин

Художник:

Даня Берковский

Корректор:

Ирина Михеева

Вёрстка:

Кирилл Климентьев

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Вам может быть интересно
Гид: что изучать, чтобы получить ИТ-профессию
Гид: что изучать, чтобы получить ИТ-профессию

Планы на будущий год.

easy
«Никто не верил, что я сама пишу код»
«Никто не верил, что я сама пишу код»

Анастасия Никулина: о дата-сайнс, ютубе и программировании.

Rust — молодой и дерзкий язык программирования
Rust — молодой и дерзкий язык программирования

Говорят, что это одновременно C++ и Haskell.

medium
Двоичное счисление на пальцах
Двоичное счисление на пальцах

Все знают, что компьютеры состоят из единиц и нулей. Но что это значит на самом деле?

easy
Ваш гид по профессиям, связанным с данными
Ваш гид по профессиям, связанным с данными

Всё, что нужно знать, прежде чем вы пойдёте в дата-сайенс, дата-инжиниринг и машинное обучение

easy
Что нового в современном CSS
Что нового в современном CSS

Модно, удобно и красиво

hard
Превращаем домашний компьютер в полноценный веб-сервер: пошаговое руководство
Превращаем домашний компьютер в полноценный веб-сервер: пошаговое руководство

Местами сложно, зато всё своё

hard
Visual Studio Code: кому и зачем он нужен
Visual Studio Code: кому и зачем он нужен

Любимый редактор кода.

easy
Зачем нужны циклы в программировании
Зачем нужны циклы в программировании

Учим компьютер делать без устали одно и то же

easy
easy