Как вентили складывают числа
Чтобы сложить два бита, хватает одного вентиля 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. Для этого нужен пятый бит.
Перетащи, чтобы повернуть. Колёсико или щипок для масштаба.
Крайнему правому столбцу хватает двух вентилей
Посмотри на крайний правый столбец отдельно. Бит ответа в нём, сумма, равен 1, когда ровно один вход равен 1. Это правило XOR. Перенос равен 1, только когда оба входа равны 1. Это правило AND. Значит, вентили XOR и AND рядом, на которые подаются одни и те же два входа, складывают два бита. Эта маленькая схема называется полусумматором. «Полу» она потому, что не может принять перенос из столбца справа.
В остальных столбцах складываются три бита
В каждом другом столбце встречаются три бита: по одному из каждого числа и перенос справа. Полный сумматор принимает все три. Его сумма равна A XOR B XOR входной перенос: она равна 1, когда нечётное число битов из трёх равно 1. Его выходной перенос равен 1, когда хотя бы два из них равны 1. Из двух полусумматоров и вентиля OR получается один полный сумматор. Поставь в ряд четыре полных сумматора, соедини выходной перенос каждого с входным переносом сумматора слева, и получится 4-битный сумматор. Каждый перенос должен пробежать справа налево, прежде чем последний столбец установится, поэтому такая схема называется сумматором с последовательным переносом. Настоящие процессоры складывают 64-битные числа более хитрыми схемами, которые вычисляют переносы заранее, но правило в каждом столбце то же.
| A | B | Входной перенос | Сумма | Выходной перенос |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 0 | 1 |
| 1 | 0 | 1 | 0 | 1 |
| 1 | 1 | 1 | 1 | 1 |
Что происходит, когда ответ слишком большой
Четыре бита вмещают числа от 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.
- Сколько будет 1 + 1 в двоичной системе?
- Какой вентиль в полусумматоре даёт бит суммы?
- XOR
- AND
- OR
- NOT
- Какой вентиль в полусумматоре даёт перенос?
- AND
- XOR
- OR
- NAND
- Сколько входных битов принимает полный сумматор?
- На полный сумматор подали A = 1, B = 1, входной перенос = 1. Чему равен его бит суммы?
- Сложи 0110 и 0011. Запиши четыре бита.
- 4-битный регистр складывает 9 + 8 и хранит только четыре бита. Какое число в нём окажется?
- Каков 4-битный дополнительный код числа 0011?
- Сколько полных сумматоров нужно сумматору с последовательным переносом для 8-битных чисел?
- Какую наибольшую сумму могут дать два 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