edubun
Русский

Как вентили складывают числа

Чтобы сложить два бита, хватает одного вентиля XOR и одного AND. Соедини цепочкой четыре полных сумматора, и можно будет складывать любые два числа от 0 до 15.

Попробуй сам, прежде чем читать дальше. Сложи 0101 и 0011 на бумаге в двоичной системе так же, как складываешь в десятичной, и записывай каждый перенос над следующим столбцом. Нужны всего три факта: 0 + 0 = 0, 0 + 1 = 1 и 1 + 1 = 10, то есть пишем 0 и переносим 1. Если пришёл перенос, то 1 + 1 + 1 = 11, значит, пишешь 1 и переносишь 1. Решение в следующем абзаце, так что сначала закрой его.

Вот решение. Крайний правый столбец: 1 + 1 = 10, пишем 0, переносим 1. Следующий: 0 + 1 плюс перенос снова дают 10, пишем 0, переносим 1. Следующий: 1 + 0 плюс перенос, 10, пишем 0, переносим 1. Крайний левый: 0 + 0 плюс перенос дают 1. Ответ 1000, то есть 8, и 5 + 3 = 8. Перенос был в трёх столбцах из четырёх. Калькулятор, игра и электронная таблица в итоге делают именно это. Внутри процессора каждый столбец обрабатывают несколько вентилей, и сцена начинается с этой же суммы. Потом попробуй в ней 9 + 8. Для этого нужен пятый бит.

Загрузка

Перетащи, чтобы повернуть. Колёсико или щипок для масштаба.

A = 0101 (5) и B = 0011 (3). Переносы бегут справа через три разряда, и сумма равна 1000 (8). Нажми на любой бит A или B или выбери число в меню. Попробуй 9 + 8: для ответа 17 нужен пятый бит, выходной перенос слева.

Крайнему правому столбцу хватает двух вентилей

Посмотри на крайний правый столбец отдельно. Бит ответа в нём, сумма, равен 1, когда ровно один вход равен 1. Это правило XOR. Перенос равен 1, только когда оба входа равны 1. Это правило AND. Значит, вентили XOR и AND рядом, на которые подаются одни и те же два входа, складывают два бита. Эта маленькая схема называется полусумматором. «Полу» она потому, что не может принять перенос из столбца справа.

В остальных столбцах складываются три бита

В каждом другом столбце встречаются три бита: по одному из каждого числа и перенос справа. Полный сумматор принимает все три. Его сумма равна A XOR B XOR входной перенос: она равна 1, когда нечётное число битов из трёх равно 1. Его выходной перенос равен 1, когда хотя бы два из них равны 1. Из двух полусумматоров и вентиля OR получается один полный сумматор. Поставь в ряд четыре полных сумматора, соедини выходной перенос каждого с входным переносом сумматора слева, и получится 4-битный сумматор. Каждый перенос должен пробежать справа налево, прежде чем последний столбец установится, поэтому такая схема называется сумматором с последовательным переносом. Настоящие процессоры складывают 64-битные числа более хитрыми схемами, которые вычисляют переносы заранее, но правило в каждом столбце то же.

ABВходной переносСуммаВыходной перенос
00000
01010
11001
10101
11111

Что происходит, когда ответ слишком большой

Четыре бита вмещают числа от 0 до 15. Сложи 9 и 8, и настоящий ответ 17 в двоичной записи равен 10001, а это пять битов. Регистр, который хранит только четыре бита, запишет 0001, то есть 1, а лишний перенос слева служит сигналом тревоги. Это переполнение. 15 + 1 в четырёх битах даёт 0000. Когда это случается, процессор ставит флаг, чтобы программы могли это заметить. Для вычитания используется тот же сумматор. Чтобы вычислить A − B, процессор переворачивает каждый бит B и прибавляет 1, получая дополнительный код B, затем прибавляет его к A и отбрасывает лишний перенос. Для 5 − 3 в четырёх битах: 3 записывается как 0011, после переворота получается 1100, плюс 1 даёт 1101. Затем 0101 + 1101 = 10010, и если оставить четыре бита, получится 0010, то есть 2.

Умножение сводится к сдвигам и сложению

Умножение собирается из тех же деталей. В двоичной системе умножение на 2 сдвигает каждый бит на один разряд влево, так же как умножение на 10 в десятичной добавляет ноль: 0011 (3) превращается в 0110 (6). Для 5 × 3 заметь, что 3 = 2 + 1. Значит, 5 × 3 = 5 × 2 + 5 × 1 = 1010 + 0101 = 1111, то есть 15. Схема умножителя сдвигает и складывает именно так, беря по одному биты второго числа, равные 1.

Частые ошибки
  • «1 + 1 = 2, значит, ответ помещается в один бит». Бит хранит только 0 или 1. 1 + 1 = 10: бит суммы равен 0, а 1 переносится. Если отбросить перенос, ответ станет 0, а это неверно.
  • «Полусумматор может складывать числа любой длины». У полусумматора нет входа для переноса справа, поэтому он работает только в крайнем правом столбце. Каждому другому столбцу нужен полный сумматор с тремя входами. В 4-битном сумматоре могут быть один полусумматор и три полных сумматора.
  • «При переполнении компьютер останавливается с ошибкой». Сумматор просто оставляет те биты, для которых есть место. 9 + 8 в четырёх битах даёт 0001, неверный ответ, который выглядит совершенно обычно. Процессор ставит флаг, а программа должна его проверить.
  • «Для вычитания нужна отдельная схема». Переверни биты B, прибавь 1 и сложи результат с A на том же сумматоре. 5 − 3: 0101 + 1101 = 10010, и четыре младших бита, 0010, дают 2.
Заметка для учителяДай сумму 0101 + 0011 раньше, чем прозвучит слово «сумматор», и пусть ученики записывают переносы над столбцами. Тогда большую часть таблиц полусумматора и полного сумматора они смогут прочитать прямо из своего решения. Теряются они на переходе от полусумматора к полному сумматору. Покажи на второй столбец их суммы и спроси, сколько битов они там сложили: три. Последовательный перенос легко разыграть вчетвером: ученики сидят в ряд и передают карточку переноса влево. Для дополнительного кода нужен один неторопливый пример вручную. Сцена не умеет вычитать, поэтому реши 5 − 3 на доске и проверь, что 0010 равно 2.
  1. Сколько будет 1 + 1 в двоичной системе?
  2. Какой вентиль в полусумматоре даёт бит суммы?
    • XOR
    • AND
    • OR
    • NOT
  3. Какой вентиль в полусумматоре даёт перенос?
    • AND
    • XOR
    • OR
    • NAND
  4. Сколько входных битов принимает полный сумматор?
  5. На полный сумматор подали A = 1, B = 1, входной перенос = 1. Чему равен его бит суммы?
  6. Сложи 0110 и 0011. Запиши четыре бита.
  7. 4-битный регистр складывает 9 + 8 и хранит только четыре бита. Какое число в нём окажется?
  8. Каков 4-битный дополнительный код числа 0011?
  9. Сколько полных сумматоров нужно сумматору с последовательным переносом для 8-битных чисел?
  10. Какую наибольшую сумму могут дать два 4-битных числа?
Главное
  • Полусумматор: сумма = A XOR B, перенос = A AND B.
  • Полный сумматор: три входа; сумма равна 1 при нечётном числе цифр 1, перенос при двух и более.
  • Полные сумматоры, соединённые цепочкой, образуют сумматор с последовательным переносом; переносы идут справа налево.
  • Переполнение: результату нужно больше битов, чем есть в регистре. Вычитание прибавляет дополнительный код.
Источники курса (9)
  • (checked 2026-10-17; reordered 2026-10-19: standards first, then official documentation, then the teaching model and calculations, history sources last)
  • Standards: NIST, "Prefixes for binary multiples" (physics.nist.gov/cuu/Units/binary.html: IEC approved kibi, mebi, gibi in December 1998; 1 B = 8 bit; 1 MiB = 1 048 576 B; 1 MB = 1 000 000 B; 1 GiB = 1 073 741 824 B; historical note: memory makers usually mean 2²⁰ bytes by megabyte, storage makers 1 000 000, and the "1.44 MB" diskette uses a megabyte of 1 024 000 bytes)
  • IETF RFC 20 "ASCII format for Network Interchange" (1969, 7-bit codes, A = 65, a = 97, 0 = 48)
  • IETF RFC 3629 "UTF-8, a transformation format of ISO 10646" (2003: 1 to 4 octets per character, ASCII unchanged, code points up to U+10FFFF, U+0800 to U+FFFF take three octets, "the first octet of a multi-octet sequence indicates the number of octets", example U+D55C U+AD6D U+C5B4 = ED 95 9C EA B5 AD EC 96 B4)
  • Official documentation: MDN Web Docs, "<color>" (hexadecimal colour notation #RRGGBB)
  • Intel, "Intel Chips" timeline poster (2012: Intel 4004 of 1971 with 2,300 transistors; 2nd generation Core 2010 with 1.16 billion)
  • Claude E. Shannon, "A Symbolic Analysis of Relay and Switching Circuits", Transactions of the AIEE vol. 57 (1938)
  • abstract of his MIT master's thesis. Computer History Museum, The Silicon Engine, "1947: Invention of the Point-Contact Transistor" (Bardeen and Brattain, December 1947, germanium)
  • John von Neumann, "First Draft of a Report on the EDVAC" (30 June 1945, Moore School, reprinted in IEEE Annals of the History of Computing 15:4, 1993).

Проверено: 2026-10-17