Как компьютер складывает числа?
Обновлено: 30.06.2024
Как компьютеры выполняют математические операции? Я имею в виду, похоже, что математическая часть — это самая основная функция компьютера.
Но я имею в виду, откуда он ЗНАЕТ, что 1+1=2?
Чтобы дать представление, я понимаю двоичный код: 1+1=10. У меня есть элементарное представление об ассемблере, я пытался программировать на нем много лет назад, поэтому я мог посмотреть на это:
двигать топор, 1
добавить топор, 1
Но как это добавить 1 к ax, а затем получить значение 2? (или b10).
Я почти вижу, как могут работать как shl, так и shr (это квадрат и квадратный корень?), но сдвигая биты, но не добавляя и т. д.
Я предполагаю, что микрочип (x86?) должен быть предварительно запрограммирован, чтобы знать порядок чисел.. Но я понятия не имею. Может ли кто-нибудь пролить свет на это?
Ответы и ответы
Вы имеете в виду 1, 2, 3, 4, . как "порядок чисел"? Если так, то нет, компьютер не запрограммирован на бесконечный ряд чисел.
Ну, я знаю, что могу добавлять числа, потому что я могу визуализировать это. Я вижу, что если у меня есть три объекта и я возьму еще 4 объекта, то теперь я могу насчитать 7 объектов. Но как это делает компьютер?
Даже это уравнение: 4+1=5. Если вы просто поместите значение "4" в компьютер и добавите к нему значение 1, как он узнает, как складывать?
Как вы добавляете от 1 до 4? Наверное "интуитивно", потому что это простые числа. А как насчет 412793 + 23871?
Если вы скажете компьютеру добавить от 1 до 4, он сначала возьмет оба числа и преобразует их в двоичные числа. 1 становится 1, 4 становится 100. Теперь он складывает их 1 + 100 = 101 и преобразует ответ обратно в десятичный вид: 5.
Думаю, я плохо доношу то, о чем пытаюсь спросить.
Откуда компьютер знает, как сложить 1 + 100, чтобы получить 101? Я имею в виду, как запрограммировать компьютер, чтобы он мог складывать числа?
Давайте начнем с 4 пустых регистров и назовем их A, B, C и R. Мы хотим добавить A к B, использовать регистр C для переноса результатов и R для хранения результата. (Очевидно, что внутри компьютера это делается намного эффективнее, но я пытаюсь все упростить.)
Первоначально:
C = 0000
A = 1011
B = 0011
R = 0000
Компьютер идет справа налево и делает следующее: складывает* два бита в A и B, сохраняет результат в регистре R. После первой операции регистры выглядят так:
C = 0010
R = 0000
Это потому, что 1 + 1 = 10, поэтому мы помещаем 0 в результат и сохраняем 1 в переносе. Теперь компьютер переходит ко 2-й паре битов, снова 1 и 1. 1 + 1 = 10, но у нас также есть перенос из предыдущего! Таким образом, он добавляет перенос к результату 10 + 1 = 11 и регистрирует его:
C = 0110
R = 0010
И это повторяется снова и снова, пока не будет готово.
* Возможно, вы до сих пор не понимаете, как компьютер может складывать 1 и 1, или 1 и 0, или 0 и 0. Это просто и может быть сделано с помощью двух вентилей, AND и XOR. Рассмотрим следующую таблицу истинности:
Если (A XOR B) равно 1, результат равен 1. В противном случае результат равен 0. Что касается переноса, который определяется результатом (A AND B) - если он равен 1, то перенос, иначе нет.
Еще раз подчеркну, что компьютер делает это намного эффективнее. Например, он не использует целый регистр для переноса — он использует один бит в специальном флаговом регистре, чтобы узнать, был ли перенос в последней операции. Кроме того, результат сохраняется не в совершенно новом регистре, а в одном из регистров A или B (как вы, наверное, догадались по внешнему виду команды ADD в ассемблере).
Компьютеры очаровательны, если подумать. Как получилось, что кусок металла превратился из простого камня в землю в способность выполнять сложные арифметические действия? Или уметь запоминать?
Чтобы понять более сложные темы, нам нужно начать с простого. Как компьютер интерпретирует число? Опять же, вы можете кричать «что такое 42+42?» сколь угодно громко в железную балку, но она не откликнется (по крайней мере, в нашем поколении!)
Десятичная – знакомая нам система счисления
В нашей повседневной жизни мы работаем в десятичной системе счисления с основанием 10. Считается, что это связано с тем, что у людей обычно десять пальцев, и на ранних стадиях мы используем их для счета. Десятичный предлагает 10 различных цифр, 0-9. Иногда вы можете услышать, как кто-то называет свои пальцы рук или ног «цифрами», так же как каждое число является цифрой.
Возможно, вы помните, как в начальной школе разбивали число на составные части. Возьмем, к примеру, число 1572. Что это на самом деле означает?
Мы можем записать 1572 как: (1*1000) + (5*100) + (7 * 10) + (2 * 1). Каждую группировку в таблице мы умножаем на десять. Это можно переписать так:
Важное отличие для тех, кто не разбирается в математике: все в степени 0 равно 1. Это пригодится позже. Почему, я оставлю доказательство в качестве упражнения для читателя.
Двоичная система счисления компьютеров
Считается, что термин «бинарная система» был введен Готфридом Лейбницем в 1869 году в его работе «Explication de l'Arithmétique Binaire». Это означает, что в системе счисления всего две разные цифры (отсюда и приставка bi, как и bipod- двуногий). Эти цифры равны 0 или 1. Двоичный код считается основанием 2, так как есть два варианта.
Наша предыдущая таблица использовала основание 10, но теперь мы работаем с основанием 2. Простая замена (замена 10 на 2) дает нам то, что будет работать для двоичного, а не для десятичного числа:
Хорошо. Но как пользоваться этой штукой? Ну, я упоминал ранее, что двоичный код может быть только 0 или 1. Если я выберу четырехзначный поток 0 или 1, то есть 0101, и введу его в нашу таблицу (идентично примеру 1572 с основанием 10), мы получим следующее:
Это дает (0 * 2^3) + (1 * 2^2) + (0 * 2^1) + (1 * 2^0) или 4+1. Таким образом, мы видим, что 0101 (по основанию 2) = 5 (по основанию 10).
Логика — правда или ложь?
Зачем возиться с двоичным кодом? Вы можете быть намного более выразительным в десятичном виде, так как там гораздо больше цифр, верно? Ну нет. Двоичный может отображать все, что может десятичный, просто для этого может потребоваться больше цифр. Ранее мы видели, что 5 соответствует 0101.
Джордж Буль (1815–1864) был математиком, который разработал метод алгебры, который позволяет нам, учитывая определенные входные данные, логически оценить, каким должен быть результат. Информатика изменила некоторые из первоначальных обозначений Буля, но по сути он дал нам такие инструменты, как И, ИЛИ, НЕ, XOR и т. д.
Для каждой из следующих таблиц мы берем два входа (названные произвольно A и B) и применяем к ним операцию. Последний столбец — результат операции.
И Таблица правды
И не требует пояснений; Я хочу что-то сделать только в том случае, если и A, и B верны:
ИЛИ Таблица истинности
ИЛИ верно, если A, B или оба верны:
НЕ Таблица правды
NOT немного отличается от другого тем, что принимает только один ввод. Он отрицает ввод, т.е.:
Таблица истинности XOR
Исключающее ИЛИ немного сложнее объяснить; Я хочу что-то сделать, если А не то же самое, что Б.
Простая двоичная арифметика
Двоичное сложение работает так же, как десятичное сложение:
- Действуя справа налево (наименьшая значащая цифра вверх), сложите два числа.
- Возможно, вам придется перенести цифру, если результат превышает значение, которое вы можете отобразить в виде одной цифры
- т.е. в базе 10 9 + 6 = 15. Это то же самое, что и 5, перенос 1.
Выше приведена принципиальная схема, показывающая, как это достигается:
- Сначала два входа, A и B, передаются в логический элемент XOR (с изогнутым краем) для вычисления суммы.
- Затем A и B передаются в логический элемент И (прямоугольный) для вычисления переноса.
Это пример схемы «полусумматора». Полный сумматор должен учитывать потенциальный перенос из предыдущего расчета.
A B Перенос (A AND B) Сумма (A XOR B) Результат 1 1 1 0 td> 10 0 1 0 1 < td >011 0 0 1 01 0 0 0 0 00 Обратите внимание, что строки 2 и 3 в приведенной выше таблице дают 01. Это связано с тем, что сложение является коммутативным процессом: 7 + 5 по основанию десяти равно 5 + 7. В случае с таблицей мы добавление одних и тех же двух чисел дважды и, следовательно, получение одного и того же результата.
Мы можем продемонстрировать полный процесс сложения, как показано ниже, сгруппировав схему Half Adder в блок для повторного использования/упрощения:
Заключение
Судя по тому, что мы здесь рассмотрели, компьютер на самом деле не такой уж и умный. Да, довольно изящно взять немного металла и заставить его делать домашнее задание по математике, но, в конечном счете, он не выполняет никаких операций, которые не мог бы выполнить 10-летний ребенок. Мы узнаем о позиционном обозначении (то есть тысячах, сотнях и т. д.) с самого раннего возраста, а также о том, как складывать. Единственная разница между компьютером и 10-летним ребенком в этом смысле — эффективность и точность; компьютеры не замедляются, когда они устали или им скучно.
Вы когда-нибудь задумывались, как компьютеры и калькуляторы, которые представляют собой не что иное, как бессмысленные коробки из пластика, проводов и других странных деталей, ухитряются делать такие умные вещи, как сложение чисел? И так быстро при этом! Как они это делают? И какое это имеет отношение к двоичным числам и булевой алгебре, о которых мы говорили в последнее время?Оставайтесь с нами, потому что это именно те вопросы, на которые мы ответим в течение следующих нескольких недель. .
Обзор: булева алгебра
Последние несколько недель мы пытались выяснить, как складывают компьютеры и калькуляторы. Мы начали с двоичной системы счисления, затем рассказали о некоторых трюках с двоичными числами и о том, как выполнять двоичное сложение, а затем поговорили о чем-то, что называется булевой алгеброй. Первое, что нужно помнить о булевой алгебре, это то, что это тип математики, который имеет дело с битами, а не с числами, к которым вы привыкли. Что немного? Это просто двоичная цифра, и она может быть равна 1 (иначе "истина") или 0 (иначе, "ложь") и ничему другому.
Вторая важная вещь, которую нужно помнить о булевой алгебре, — это ее 3 основные операции: И, ИЛИ и НЕ. Что они делают? Ну, НЕ просто возвращает вам значение, противоположное биту, который вы ему даете. Таким образом, НЕ 0 равно 1, а НЕ 1 равно 0. И и ИЛИ оба принимают значения двух битов и возвращают вам 1 или 0. И возвращает вам 1, только если оба входных бита равны 1, и ИЛИ возвращает 1, если один (или оба) входных бита равны 1. Удивительно, но эти три операции — НЕ, И и ИЛИ — являются ключом к пониманию того, как компьютеры складывают.
Страницы
Об авторе
Джейсон Маршалл — автор книги Краткое и грязное руководство по алгебре для чувака-математика. Он дает четкие объяснения математических терминов и принципов, а его простые приемы решения основных задач по алгебре заставят даже самого математическо-фобного человека с нетерпением ждать решения любой математической задачи, которая встретится им на пути.
Читайте также: