Правила выполнения арифметических операций в двоичной системе
Перевод числа из двоичной системы в десятичную
Перевод числа из двоичной системы в десятичную можно осуществлять для целой и дробной частей числа по одному алгоритму путем вычисления суммы произведений цифры двоичного числа на вес ее знакоместа:
111000112=1*27+1*26+1*25+0*24+0*23+0*22+1*21+1*20=128+64+32+2+1=22710
0,101000112=1*2-1+0*2-2+1*2-3+0*2-4+0*2-5++0*2-6+1*2-7+1*2-8=0.5+0.125+0.0078+0.0039=0.6367
Перевод числа из десятичной системы в двоичную
Перевод числа из десятичной системы в двоичную осуществляется отдельно для целой и дробной частей числа по следующим алгоритмам:
а) целое десятичное числоделится нацело на основание 2, затем на 2 делятся последовательно все частные от целочисленного деления, до тех пор пока частное не станет меньше основания. В результат заносится последнее частное и все остатки от деления, начиная с последнего. Например:
перевести число 227 в двоичную форму:
227:2=113 (записываем в результат остаток от деления 1), 113:2=56 (записываем в результат остаток от деления 1), 56:2=28 (записываем в результат остаток от деления 0), 28:2=14 (записываем в результат остаток от деления 0), 14:2=7 (записываем в результат остаток от деления 0), 7:2=3 (записываем в результат остаток от деления 1), 3:2=1 (записываем в результат остаток от деления 1), записываем в результат последнее частное – 1. Итого получаем: 22710=111000112. Проверим обратным переводом:
1*20+1*21+0*22+0*23+0*24+1*25+1*26+1*27=1+2+32+64+128=227
б) десятичная дробьпоследовательно умножается на основание 2, причем сразу после каждой операции умножения полученная целая часть записывается в результат и в дальнейшем умножении не участвует (отбрасывается). Количество операций умножения зависит от требуемой точности, например:
переведем в двоичную форму число 0.64:
0.64*2=1.28 (отбрасываем 1 и записываем в результат 1)
0.28*2=0.56 (записываем в результат 0)
0.56*2=1.12 (отбрасываем 1 и записываем в результат 1)
0.12*2=0.24 (записываем в результат 0)
0.24*2=0.48 (записываем в результат 0)
0.48*2=0.96 (записываем в результат 0)
0.96*2=1.82 (записываем в результат 1)
Итого: 0.6410=0.10100012
Проверим обратным переводом:
1*2-1+0*2-2+1*2-3+0*2-4+0*2-5+0*2-6+1*2-7 = 0.5*0+0.125+0+0+0+0.0078=0.6328
Представление в компьютере отрицательных чисел
Следует иметь в виду, что в памяти ЭВМ двоичные числа хранятся в регистрах, состоящих из 8 ячеек, т.е. минимальное двоичное число, которое можно разместить в памяти, должно быть восьмиразрядным. При этом в незаполненных ячейках регистра (в старших разрядах) записываются нули.
В отличие от десятичной системы в двоичной системе счисления отсутствуют специальные символы, обозначающие знак числа: положительный (+) или отрицательный (-), поэтому для представления двоичных отрицательных чисел используются следующие две формы.
Форма значения со знаком – старший (левый) разряд метится как знаковый и содержит информацию только о знаке числа:
1 – число отрицательное, 0 – число положительное.
Остальные разряды отводятся под абсолютную величину числа.
510 = 0000 01012 ; -510=1000 01012.
Устройство компьютера выполняется таким образом, чтобы отрицательные числа были представлены в дополнительном коде, поскольку это дает существенную экономию времени при выполнении с ними арифметических операций.
Форма обратного дополнительного кода, перевод в которую производится по следующему алгоритму:
1) Отбросить знаковый разряд;
2) инвертировать все разряды числа;
3) прибавить единицу к полученному коду;
4) восстановить единицу в знаковом разряде.
Например:
Преобразование числа -510
Записываем в двоичном виде: 1000 0101; отбрасываем знаковый разряд: 000 0101; инвертируем все разряды: 111 1010; прибавляем единицу: 111 1010 + 1 = 111 1011; восстанавливаем единицу в знаковом разряде: 1111 1011. Итого -510 в обратном дополнительном коде записывается как 1111 1011.
Правила выполнения арифметических операций в двоичной системе
Сложение.Операция сложения выполняется так же, как и в десятичной системе. Переполнение разряда приводит к появлению единицы в следующем разряде:
0+0=0, 0+1=1, 1+1=10;
+ 111011
Вычитание.Поскольку большинство современных компьютеров располагает только одним аппаратным сумматором, с помощью которого реализуются все арифметические операции, вычитание сводится к сложению с отрицательным числом:
15-8 =15+(-8).
Правила вычитания в двоичной системе.Алгоритм операции вычитания путем сложения дополнительных кодов:
1) преобразовать отрицательное число из формы со знаком в дополнительный код;
2) выполнить операцию двоичного сложения над всеми разрядами,
включая знаковый, игнорируя единицу переноса из самого высокого
разряда;
3) при равенстве единице знакового разряда суммы, что означает
получение отрицательного результата в форме дополнительного кода,
необходимо перевести результат в знаковую форму (используя алгоритм перевода в обратную форму).
Например, выполним действие 13-15=13+(-15)
1. Переводим -15 в форму дополнительного кода:
1000 1111 –> 000 1111 -> 111 0000 -> 111 0000 +1=111 0001 -> 1111 0001
2. Складываем 13 и -15:
+11110001
3. Переводим в обычную двоичную форму:
1111 1110 -> 111 1110 ->000 0001 -> 000 0001+1=000 0010 -> 1000 0010 = -210
Таким образом, при выполнении операций сложения и вычитания арифметико-логическому устройству процессора приходится выполнять поразрядное сложение с переносом, инвертирование и проверку на знак двоичных чисел.
В тех случаях, когда необходимо произвести арифметические действия над числами больше 127, они размещаются уже не в одном, а в двух и более байтах.
Например, выполним действие: 15-13=15+(-13)
1. Переводим -13 в форму дополнительного кода:
1000 1101 –> 000 1101 -> 111 0010 -> 111 0010 +1=111 0011 -> 1111 0011
2. Складываем 15 и -13:
+11110011
3. Знаковый разряд равен 0, обратный перевод не требуется, т. е. результат 0000 0010=210
Умножение.Если наряду с перечисленными операциями выполнить операции сдвига, то с помощью сумматора можно выполнить и умножение, которое сводится к серии повторных сложений. Если цифра в нулевой позиции множителя равна 1, то множимое переписывается под соответствующими разрядами, умножение на последующие единицы приводят к сдвигу слагаемого влево на одну позицию. Если цифра множителя равна 0, то следующее слагаемое смещается на две позиции влево.
Например, умножим 6 (0000 0110) на 5 (0000 0101):
*00000101
(умножаем на 1) +00000110
(умножаем на 0) 1
(умножаем на 1) +0000011011
Проверим: 0001 1110=0*20+1*21+1*22+1*23+1*24=2+4+8=16=30
Например, умножим 15 (0000 1111) на 13 (0000 1101):
*00001101
(умножаем на 1) +00001111
(умножаем на 0) 1
(умножаем на 1) +0000111111
(умножаем на 1) +00001111111
Проверим: 1100 0011=1*27+1*26+0*25+0*24+0*23+0*22+1*21+1*20=1+2+64+128=195
Деление.При выполнении операции деления несколько раз производится операция вычитания. Поэтому предварительно следует найти дополнительный код делителя. Деление выполняется путем повторного вычитания и сдвига. Для примера выполним деление числа 195 (1100 0011) на 15 (0000 1111). Дополнительный код числа 0000 1111 -> 11110001. Поскольку по правилам деления каждое промежуточное делимое должно быть больше делителя, выбираем в качестве первого делимого число 11000, т.е. первые пять разрядов и добавляем слева три нуля, дополняя делимое до 8 разрядов. Затем производим сложение его с дополнительным кодом делимого и заносим в результат единицу. Если следующее делимое после сноса очередной цифры будет меньше делителя, то в результат заносится нуль и в делимое сносится еще одна цифра из исходного делимого.
+11110001111
(частное<делителя (1111), то в результат 1) 00001001011
(сносим следующую цифру - 0) 0001001011
+1111000111
(частное<делителя, то в результат 1) 0000001111
(сносим следующую цифру – 1, получившееся число, 000001111
< делителя поэтому в результат записываем 0) 12 12 (сносим следующую цифру – 1) 00001111
+11110001
(частное<делителя, в результат 1, деление закончено) 00000000
Результат: 0000 1101. Проверим:
1*23+1*22+0*21+1*20=1+4+8=13