Выполнение арифметических операций в компьютере

Правила выполнения арифметических операций в двоичной системе счисления аналогичны правилам операций в десятичной системе счисления.

Например:

Сложение + Вычитание
Результат Результат
Умножение × 101 Деление /101
Результат (произведение) Результат (частное)

Особенности выполнения операций над числами с плавающей запятой

При сложении (вычитании) чисел с плавающей запятой и одинаковыми порядками следует сложить (вычесть) мантиссы и результату присваивается порядок, общий для исходных чисел. Если порядки исходных чисел разные, то сначала эти порядки выравниваются (число с меньшим порядком приводится к числу с большим порядком), затем выполняется операция сложения (вычитания) мантисс. Если при выполнении операции сложения мантисс возникает переполнение, то сумма мантисс сдвигается вправо на один разряд, а порядок суммы увеличивается на 1. При умножении чисел с плавающей запятой их мантиссы перемножаются, а порядки складываются. При делении чисел с плавающей запятой мантисса делимого делится на мантиссу делителя, а для получения порядка частного из порядка делимого вычитается порядок делителя. При этом если мантисса делимого больше мантиссы делителя, то мантисса частного окажется больше 1 (происходит переполнение) и ее следует сдвинуть на один разряд вправо, одновременно увеличив на единицу порядок частного.

Выполнение арифметических операций над числами, представленными в дополнительных кодах

При выполнении арифметических операций в ЭВМ применяются модифицированные коды, которые отличаются от простого использованием для изображения знака числа двух разрядов. Второй знаковый разряд служит для автоматического обнаружения ситуации переполнения разрядной сетки: при отсутствии переполнения оба знаковых разряда должны иметь одинаковые цифры (нули или единицы), а при переполнении разрядной сетки цифры в них будут разные. Сложение производится по обычным правилам сложения двоичных чисел: единица переноса, возникающая из старшего знакового разряда, просто отбрасывается. Примеры сложения (запятая условно отделяет знаковый разряд от самого числа):

Х = –1101; Y = 1001. Результат сложения: 11,0011 + 00,1001 = 11,1100 (или –0100);

Х = 1101; Y = 1001. Результат сложения: 00,1101 + 00,1001 = 01,0110 (переполнение, после сдвига вправо получим 00,10110, или +10110);

Х = 1101; Y = –1001. Результат сложения: 00,1101 + 11,0111 = 100,0100 (или 00,0100);

Х = –1101; Y = –1001. Результат сложения: 11,0011 + 11,0111 = 10,1010 (переполнение, после сдвига вправо получим 11,01010, или –10110).

Умножение чисел в дополнительных кодах осуществляется по обычным правилам умножения двоичных чисел. Единственной особенностью является то, что если сомножитель является отрицательным (знаковые разряды равны 11), то перед началом умножения следует приписать к нему слева столько единиц, сколько значащих разрядов у другого сомножителя справа от запятой. Результат (произведение) всегда в дополнительном коде.

ПРИМЕЧАНИЕ

Добавление единиц слева перед отрицательным числом не изменяет его величины, так как перед положительным числом можно написать сколь угодно нулей, не изменяя величины числа; наоборот, перед отрицательным числом (в дополнительном или обратном кодах) добавление лишних нулей недопустимо.

Примеры операции умножения:

Х = 00,111 · 00,101 = 00,100011   00,111 × 00,101 ________________ __________   Х = 00,111 · 11111,011 = 11,011101   00,111 × 11111,011 _________________ ___________________________ 0011011,010101 11,011101  
Х = 11111,001 · 00,101 = 11,011101 11111,001 × 00,101   001011,011101 11,01101   Х = 11111,001 · 11111,011 = 00,100011 11111,001 × 11111,011 1111010000,100011 00,100011

Особенности выполнения операций в обратных кодах

Обратные коды следует складывать как обычные двоичные числа, поступая со знаковыми разрядами, как с обычными разрядами, а если возникает единица переноса из знакового разряда, ее следует прибавить к младшему разряду суммы кодов. Последнее обстоятельство (возможное добавление 1 в младший разряд) увеличивает время выполнения операций в обратных кодах, поэтому в компьютере чаще используются дополнительные коды.

Выполнение арифметических операций в шестнадцатеричной системе счисления

Арифметические операции в шестнадцатеричной системе в машине не выполняются. Операции сложения и вычитания иногда приходится выполнять при программировании, например, при вычислении полных адресов ячеек памяти (при сложении и вычитании адресов сегмента, базы, индекса, смещения). Правила их выполнения обычные для позиционной системы счисления. Примеры операции сложения:

A58 + 34C = DA4 5BAC + 2A45 = 85F1 + BEFA = 7374B