Базовый CS с нуля
Что такое компьютер: собери инструментарий от битов к арифметике
Ты прочитал, как биты становятся числами, буквами, истинностными значениями и арифметикой. Теперь построй всю лестницу сам — маленькую, сначала руками, потом в коде — чтобы цепь от двухсостоянийного переключателя до работающего сумматора стала тем, что ты собрал, а не просто посмотрел.
Преврати ментальную модель юнита в работающий инструментарий: конвертируй между двоичной и десятичной, декодируй байт более чем одной кодировкой и симулируй булевы гейты достаточно, чтобы сложить два бита полусумматором, собранным из AND, OR и NOT.
Собери небольшой инструментарий командной строки (на любом языке), который берёт сырые биты и проводит их вверх по лестнице юнита — число, затем закодированный символ, затем полусумматор на уровне гейтов — доказывая на каждой ступени, что ты можешь получить результат руками и подтвердить его в коде.
- binary-to-decimal и decimal-to-binary дают корректный круговой обход на каждом тестовом значении (например 0, 13, 90, 180, 255), показанный парами до/после.
- Декодер байта выводит, например, 65 и как число 65, и как символ 'A', а строка-примечание утверждает, что смысл пришёл из выбранной кодировки, а не из битов.
- Все три таблицы истинности гейтов, а также таблицы XOR и полусумматора выводятся корректно и в точности совпадают с таблицами из уроков юнита.
- Полусумматор даёт sum 0 / carry 1 для входов 1 и 1, и лист ручной проверки показывает тот же результат, выведенный на бумаге.
- Расширь декодер байта до третьего чтения: трактуй три подряд идущих байта как RGB-пиксель и выведи тройку (R, G, B), отметив, что это те же биты при ещё одной кодировке.
- Соедини два полусумматора и гейт OR в полный сумматор, затем сцепи четыре полных сумматора, чтобы сложить два 4-битных числа; проверь несколько сумм против десятичной арифметики.
- Перестрой not_gate, and_gate и or_gate, используя только один примитив nand(a, b), демонстрируя, что один NAND функционально полон.
- Добавь крошечный тестовый каркас, который автоматически проверяет каждую таблицу истинности и каждый круговой обход, чтобы весь инструментарий проходил или падал за один запуск.
Сборка этого инструментария делает юнит конкретным: ты конвертировал биты в числа по позиционному значению и обратно делением пополам, увидел, как один байт значит число и букву при разных кодировках, и собрал AND, OR, NOT в XOR, а затем в полусумматор, который корректно складывает два бита. Это вся дуга — двухсостоянийные переключатели, через кодировки и булеву логику, вверх к арифметике — собранная твоими руками.