- •Ю никод
- •Предпосылки создания и развитие Юникода
- •Юникод и utf
- •Кодирование целых чисел Прямой код
- •Код со сдвигом
- •Дополнительный код (дополнение до единицы)
- •Дополнительный код (дополнение до двух)
- •Арифметические действия над целыми числами
- •Сложение и вычитание
- •Сложение и вычитание чисел со знаком в обратном коде
- •Сложение и вычитание чисел со знаком в дополнительном коде
- •Умножение и деление
- •Ошибки при выполнении арифметических операций
Сложение и вычитание чисел со знаком в обратном коде
Сложение в обратном коде происходит следующим образом: по обычному алгоритму складываются все разряды, включая знаковый. Результат такого сложения для k-разрядных наборов имеет длину k+1 (самый левый разряд результата равен единице, если был перенос при сложении старших разрядов операндов, иначе - нулю). Значение левого k +1 -го разряда добавляется к младшему разряду результата. Получаем k-разрядный набор, который и будет суммой двух чисел в обратном коде.
Пример (k=3): +310+(-110) = 0112+ 1102= 1 0012 => 0012+1 = 0102 = +210. Вычитание чисел в обратном коде x—y сводится к сложению x+ (—y).
Сложение и вычитание чисел со знаком в дополнительном коде
В дополнительном коде сложение происходит так: по обычному алгоритму складываются все разряды, включая знаковый; единица переноса в k+1-й разряд отбрасывается (т.е. сложение по модулю 2k ).
Пример (k=3): +310+(-110)= 0112+ 1112= 10102 => 0102 = +210.
При вычитании тоже действует обычный алгоритм, причем если уменьшаемое меньше вычитаемого, к двоичному коду уменьшаемого слева приписывается единица (т.е. добавляется 2k) и только после этого производится вычитание (такой способ называется вычитание по модулю 2k).
Пример(k=3): 11О-31О=0012-0112 => 10012-0112 =1102 = -210.
Если x и y — числовые значения дополнительного кода знаковых чисел, то числовые значения дополнительных кодов суммы и разности определяются по следующим формулам:
Умножение и деление
Во многих компьютерах умножение производится как последовательность сложений и сдвигов. Для этого в АЛУ имеется регистр, называемый накапливающим сумматором, который до начала выполнения операции содержит число ноль. В процессе выполнения операции в нем поочередно размещаются множимое и результаты промежуточных сложений, а по завершении операции — окончательный результат. Другой регистр АЛУ, участвующий в выполнении этой операции, вначале содержит множитель. Затем по мере выполнения сложений содержащееся в нем число уменьшается, пока не достигнет нулевого значения.
Деление для компьютера является трудной операцией. Обычно оно реализуется путем многократного прибавления к делимому дополнительного кода делителя.
Ошибки при выполнении арифметических операций
При выполнении арифметических операций могут возникать ситуации, когда старшие разряды результата операции не помещаются в отведенной для него области памяти. Ниже приводятся примеры ошибочных вычислений (k =3).
Сложение знаковых чисел в обратном коде:
-З10 + (-210) = 1002 + 1012 = 10012 => 0012 +1 = 0102 = +210 Вычитание знаковых чисел в обратном коде:
+210 - (-310)= 0102 -1012 => 10102 -1012 = 1012 = -310.
Такая ситуация называется переполнением цифровой части (мантиссы) формата числа. Для обнаружения переполнения и оповещения о возникшей ошибке в компьютере используются специальные средства. Реакция на разные ошибки может быть разная. Так, в некоторых ЭВМ при делении на ноль вычисления прекращаются (фатальная ошибка), а при переполнении мантиссы устанавливается признак переполнения в так называемом регистре флагов и вычисления продолжаются.
Страница
