Возможны два варианта изображения знаков чисел двоичными цифрами:
"+" обозначать "0", а "-" обозначать "1";
"+" обозначать "1", а "-" обозначать "0".
Оба варианта равноценны.
На практике в основном используется первый вариант.
При таком решении все положительные числа с фиксированной запятой имеют вид: 0, x-1x-2... x-n, а отрицательные: 1, x-1x-2... x-n (естественно, что запятая, между знаковым разрядом и самим числом внутри ЭВМ не кодируется). Код знака помещается слева от запятой на место разряда с весом 2°. Поэтому, если знак и цифровую часть числа рассматривать как единое целое, то изображение положительных чисел не изменяется и определяется интервалом 0 ≤ Х < 1, а все отрицательные числа изображаются положительными числами [Х], расположенными в интервале 1 ≤ [Х] <2 (так называемое, представление числа в прямом коде).
Рассмотренную связь между числом Х и его изображением в прямом коде - [Х]пк можно представить в следующем виде:
$$ Х_{ПК} = ЗнХ. \left | Х \right | $$0.1012пк = +(1/2 +1/8) = +5/8
1.1012пк = -5/8
Число с фиксированной точкой в прямом коде имеет такое же представление, как и указанное в (7.1). Однако, здесь следует помнить, что двоичное число с фиксированной точкой имеет формат согласно (6.2). В этом случае числу 0.1012пк соответствует десятичное число +510, а числу 1.1012пк - -510.
Очевидно, что если рассматривать числа с фиксированной точкой или запятой в прямом коде вместе со знаком, то такая операция даже простейшем случае алгебраического сложения не может быть выполнена. Так для чисел с фиксированной точкой
01012пк = +510
10102пк = -210
При сложении этих чисел получим
что, конечно, является неправильным результатом.
Методика выполнения алгебраического сложения, рациональная для применения в ЭВМ, должна удовлетворять следующим условиям:
Всем указанным условиям удовлетворяет методика алгебраического сложения дополнительных и обратных кодов исходных чисел.
В этом коде связь между числом Х и его изображением в обратном коде - [Х]ок определяется равенством (7.2):
$$\left[X\right]_{ОК}=\begin{cases} X, \text{если }X\geq0;\\ 2+X-2^{-n}, \text{если }X\leq0 \end{cases}$$При Х ≥ 0:
[Х]ок = 2 + Х - 2-n = 2 - |X| - 2-n = 2 - 2-n + X.
Запишем это выражение в несколько другом виде.
Таким образом, для отрицательного числа получение обратного кода заключается в присвоении знаковому разряду кода 1 и замене в цифровой части числа 0 на 1, а 1 на 0 (выполняется $$\left[1,\overline{x}_1...\overline{x}_n\right]_{ДК}+2^{-n}$$).
При преобразовании от обратного кода к прямому от обратного кода числа берется обратный код.
При суммировании чисел в обратном коде могут встретиться четыре возможные комбинации.
[Х]ок + [Y]ок = X + 2 + Y - 2-n - предварительный результат.
Т.к. X + Y > 0, то действительный результат равен X + Y. Для того чтобы от предварительного результата перейти к действительному, необходима коррекция: вычесть 2 и прибавить 2-n к предварительному результату, т.е. в предварительном результате исключается 1 в разряде с весом 21, что равноценно вычитанию 2, и эту же единицу направляем в младший разряд предварительного результата, что равноценно прибавлению 2-n.
[Х]ок + [Y]ок = X + (2 + Y - 2-n). Этот результат соответствует правильному, так как согласно условию X + Y < 0. Следовательно, [X + Y < 0]ок = 2 + (X + Y) - 2-n.
[X]ок + [Y]ок = (2 + X - 2-n ) + (2 + Y - 2-n ) - предварительный результат.
Правильный результат [(X + Y) < 0]ок = 2 + Х + Y - 2-n.
Это определяет необходимость выполнения коррекции предварительного результата, которая аналогична рассмотренной в случае 2, т.е. вычесть 2 и прибавить 2-n к предварительному результату.
При суммировании в обратном коде чисел разных знаков возможно получение X + Y = 0. Здесь методика суммирования обратных кодов исходных чисел не изменяется, а результат получается в виде 1,1 . . .1. Например,
Получили обратный код отрицательного нуля [- 0,0 . . . 0 ]ок = 1,1 ... 1. Такой результат согласуется с формулой (7.2), где указано, что X = 0 может иметь двоякое изображение: код положительного нуля и код отрицательного нуля.
Здесь связь между числом X и его изображением в дополнительном коде [Х]дк определяется следующим равенством.
Положительное число в дополнительном коде выглядит так же, как и в прямом и обратом кодах, то есть для X > 0 справедливо утверждение:
Xдк = Xпк = Xок
Получение дополнительного кода отрицательного числа осуществляется в соответствии с равенством:
[Х]дк = [2 + Х – 2-n] + 2-n = [Х]ок + 2-n
Обратное преобразование отрицательного числа (от дополнительного к прямому) выполняется следующим образом.
$$\left[-0, x_1...x_n\right]_{ДК}=1,\overline{x}_1...\overline{x}_n+2^{-n}=\left[1,\overline{\overline{x}}_1...\overline{\overline{x}}_n\right]_{ДК}=1,\overline{\overline{x}}_1...\overline{\overline{x}}_n+2^{-n}=1, x_1...x_n$$Например [[- 0,1101]дк = 1,0011]дк = 1,1101, то есть от дополнительного кода берется дополнительный код.
Рассмотрим четыре случая:
[Х]дк + [Y]дк = X + (2 + Y) = 2 + (X + Y) – предварительный результат.
Правильный результат при Х + Y > 0 равен X + Y.
Выполняется коррекция, равная вычитанию 2 из предварительного результата (исключение в нем единицы с весом 21).
Методика выполнения операции не изменяется, когда [Х]дк + [Y]дк = 0.
Например,
То есть ноль в дополнительном коде ноль имеет единственное представление.
Здесь действие
[Х]дк + [Y]дк = X + (2 + Y) = 2 + (X + Y)
дает правильный результат без коррекции.
[Х]дк+ [Y]дк = (2 + Х) + (2 + Y) = 2 + 2 + X + Y ,
получаем результат, который отличается от правильного
[(X + Y) < 0]дк = 2 + (X + Y) на 2.
Необходима и здесь коррекция, рассмотренная в случае 2, то есть вычитание 2 из предварительного результата (исключение в нем единицы с весом 21).
Достоинства операций суммирования чисел в обратном и дополнительном кодах:
Недостаток: невозможно фиксировать переполнение.
Отметим, что в современных ЭВМ вся числовая информация со знаком записывается в дополнительном коде. Поэтому, например, число FFFFF...FFFF16 = -110.
Для быстрого перевода числа из прямого кода в дополнительный или наоборот, из дополнительного кода в прямой можно воспользоваться очень простым правилом.
Как уже указывалось, положительные числа в прямом и дополнительном кодах записываются одинаково. Так что здесь никаких проблем не возникает.
Для отрицательных чисел при переводе можно воспользоваться следующим правилом. Знак отрицательного числа, единица, естественно, сохраняется. А цифровые разряды меняются слева направо на противоположные до последней единицы в числе. Последняя единица и все следующие за ней разряды сохраняются:
0.10101100дк = 0.10101100пк; 0.00110011пк = 0.00110011дк.
1.10101100дк = 1.01010100пк; 1.00110011пк = 1.11001101дк.
Это правило вытекает из общего механизма перевода отрицательных чисел из прямого кода в дополнительный и наоборот. Первый шаг такого действия – инвертирование всех разрядов цифровой части (напомним, речь идет об отрицательных числах). При этом стоящие в конце числа нули станут единицами. На втором шаге к младшему разряду полученного результата добавляется единица. Это вызовет перенос, который будет распространяться до того разряда, который в новом числе равен нулю, а в исходном, следовательно, равен единице. Преобразование закончено.
Прежде всего, отметим, что переполнение разрядной сетки при суммировании чисел с фиксированной запятой возможно лишь для операндов, имеющих одинаковые знаки, так как, в противном случае, модуль результата окажется меньше модуля любого из операндов и, следовательно, переполнения не будет.
В связи с этим, факт наличия переполнения достаточно просто определить по изменению знака результата по сравнению со знаками операндов:
$$OV= Зн\overline{X} \;\And\; Зн\overline{Y} \;\And\; P \vee ЗнX\; \And\; ЗнY\; \And\; \overline{P},$$где P – перенос за пределы знакового разряда.
В модифицированных кодах кодирование знака осуществляется 2-мя разрядами:
"+" кодируется как "00"
"-" кодируется как "11".
При этом изображение числа X в этих кодах определяется равенствами:
$$\left[X\right]_{МДК}=\begin{cases}X, если \; X\geq0;\\4+X, если \; X \lt 0\end{cases}$$ $$\left[X\right]_{МОК}=\begin{cases}X, если \; X\geq0;\\4+X-2^n, если \; X \leq 0\end{cases} $$Эта избыточность, сохраняя все качества обычных дополнительного и обратного кодов, дополняет их способностью фиксировать переполнение.
Знаковые разряды результата "01" определяют положительное переполнение в операциях алгебраического суммирования, а "10" – отрицательное.
При этом основная методика выполнения операций алгебраического суммирования в обратном и дополнительном кодах не меняется:
Данный метод, при всей его простоте и наглядности, практического применения в ЭВМ не нашел. В основном, это связано с его большой избыточностью при кодировании данных и потерями времени при выполнении операции и последующей интерпретации результата.
В настоящее время практически во всех компьютерах роль модифицированных кодов выполняют переносы, идущие в знаковый и из знакового разряда. Определение факта наличия переполнения выполняется практически одновременно с выполнением самой операции суммирования по следующей формуле:
$$OV = C_7 \oplus C_8,$$на примере восьмиразрядных операндов, где C7 – перенос в старший (знаковый) разряд, а C8 – перенос из знакового разряда.
Так при сложении операндов
произойдет переполнение разрядной сетки результата:
$$OV = C_7 \oplus C_8 =0 + 1 =1,$$а при сложении операндов
нет, так как в данном случае: $$OV = C_7 \oplus C_8 =1 \oplus 1 =0,$$.
Такой подход требует использования всего лишь одного дополнительного элемента – "сумма по модулю два" – в сумматоре и практически не снижает его быстродействия.
В лекции рассмотрено представление чисел в прямом, обратном и дополнительном кодах. Особое внимание уделено дополнительному коду представления числа как наиболее распространенному в современных компьютерах. Показаны особенности алгебраического суммирования чисел в обратном и дополнительном кодах при различных сочетаниях операндов. Рассмотрены механизмы фиксации переполнения при выполнении операции алгебраического суммирования чисел.
Возможны два варианта изображения знаков чисел двоичными цифрами:
"+" обозначать "0", а "-" обозначать "1";
"+" обозначать "1", а "-" обозначать "0".
Оба варианта равноценны.
На практике в основном используется первый вариант.
При таком решении все положительные числа с фиксированной запятой имеют вид: 0, x-1x-2... x-n, а отрицательные: 1, x-1x-2... x-n (естественно, что запятая, между знаковым разрядом и самим числом внутри ЭВМ не кодируется). Код знака помещается слева от запятой на место разряда с весом 2°. Поэтому, если знак и цифровую часть числа рассматривать как единое целое, то изображение положительных чисел не изменяется и определяется интервалом 0 ≤ Х < 1, а все отрицательные числа изображаются положительными числами [Х], расположенными в интервале 1 ≤ [Х] <2 (так называемое, представление числа в прямом коде).
Рассмотренную связь между числом Х и его изображением в прямом коде - [Х]пк можно представить в следующем виде:
$$ Х_{ПК} = ЗнХ. \left | Х \right | $$0.1012пк = +(1/2 +1/8) = +5/8
1.1012пк = -5/8
Число с фиксированной точкой в прямом коде имеет такое же представление, как и указанное в (7.1). Однако, здесь следует помнить, что двоичное число с фиксированной точкой имеет формат согласно (6.2). В этом случае числу 0.1012пк соответствует десятичное число +510, а числу 1.1012пк - -510.
Очевидно, что если рассматривать числа с фиксированной точкой или запятой в прямом коде вместе со знаком, то такая операция даже простейшем случае алгебраического сложения не может быть выполнена. Так для чисел с фиксированной точкой
01012пк = +510
10102пк = -210
При сложении этих чисел получим
что, конечно, является неправильным результатом.
Методика выполнения алгебраического сложения, рациональная для применения в ЭВМ, должна удовлетворять следующим условиям:
Всем указанным условиям удовлетворяет методика алгебраического сложения дополнительных и обратных кодов исходных чисел.
В этом коде связь между числом Х и его изображением в обратном коде - [Х]ок определяется равенством (7.2):
$$\left[X\right]_{ОК}=\begin{cases} X, \text{если }X\geq0;\\ 2+X-2^{-n}, \text{если }X\leq0 \end{cases}$$При Х ≥ 0:
[Х]ок = 2 + Х - 2-n = 2 - |X| - 2-n = 2 - 2-n + X.
Запишем это выражение в несколько другом виде.
Таким образом, для отрицательного числа получение обратного кода заключается в присвоении знаковому разряду кода 1 и замене в цифровой части числа 0 на 1, а 1 на 0 (выполняется $$\left[1,\overline{x}_1...\overline{x}_n\right]_{ДК}+2^{-n}$$).
При преобразовании от обратного кода к прямому от обратного кода числа берется обратный код.
При суммировании чисел в обратном коде могут встретиться четыре возможные комбинации.
[Х]ок + [Y]ок = X + 2 + Y - 2-n - предварительный результат.
Т.к. X + Y > 0, то действительный результат равен X + Y. Для того чтобы от предварительного результата перейти к действительному, необходима коррекция: вычесть 2 и прибавить 2-n к предварительному результату, т.е. в предварительном результате исключается 1 в разряде с весом 21, что равноценно вычитанию 2, и эту же единицу направляем в младший разряд предварительного результата, что равноценно прибавлению 2-n.
[Х]ок + [Y]ок = X + (2 + Y - 2-n). Этот результат соответствует правильному, так как согласно условию X + Y < 0. Следовательно, [X + Y < 0]ок = 2 + (X + Y) - 2-n.
[X]ок + [Y]ок = (2 + X - 2-n ) + (2 + Y - 2-n ) - предварительный результат.
Правильный результат [(X + Y) < 0]ок = 2 + Х + Y - 2-n.
Это определяет необходимость выполнения коррекции предварительного результата, которая аналогична рассмотренной в случае 2, т.е. вычесть 2 и прибавить 2-n к предварительному результату.
При суммировании в обратном коде чисел разных знаков возможно получение X + Y = 0. Здесь методика суммирования обратных кодов исходных чисел не изменяется, а результат получается в виде 1,1 . . .1. Например,
Получили обратный код отрицательного нуля [- 0,0 . . . 0 ]ок = 1,1 ... 1. Такой результат согласуется с формулой (7.2), где указано, что X = 0 может иметь двоякое изображение: код положительного нуля и код отрицательного нуля.
Здесь связь между числом X и его изображением в дополнительном коде [Х]дк определяется следующим равенством.
Положительное число в дополнительном коде выглядит так же, как и в прямом и обратом кодах, то есть для X > 0 справедливо утверждение:
Xдк = Xпк = Xок
Получение дополнительного кода отрицательного числа осуществляется в соответствии с равенством:
[Х]дк = [2 + Х – 2-n] + 2-n = [Х]ок + 2-n
Обратное преобразование отрицательного числа (от дополнительного к прямому) выполняется следующим образом.
$$\left[-0, x_1...x_n\right]_{ДК}=1,\overline{x}_1...\overline{x}_n+2^{-n}=\left[1,\overline{\overline{x}}_1...\overline{\overline{x}}_n\right]_{ДК}=1,\overline{\overline{x}}_1...\overline{\overline{x}}_n+2^{-n}=1, x_1...x_n$$Например [[- 0,1101]дк = 1,0011]дк = 1,1101, то есть от дополнительного кода берется дополнительный код.
Рассмотрим четыре случая:
[Х]дк + [Y]дк = X + (2 + Y) = 2 + (X + Y) – предварительный результат.
Правильный результат при Х + Y > 0 равен X + Y.
Выполняется коррекция, равная вычитанию 2 из предварительного результата (исключение в нем единицы с весом 21).
Методика выполнения операции не изменяется, когда [Х]дк + [Y]дк = 0.
Например,
То есть ноль в дополнительном коде ноль имеет единственное представление.
Здесь действие
[Х]дк + [Y]дк = X + (2 + Y) = 2 + (X + Y)
дает правильный результат без коррекции.
[Х]дк+ [Y]дк = (2 + Х) + (2 + Y) = 2 + 2 + X + Y ,
получаем результат, который отличается от правильного
[(X + Y) < 0]дк = 2 + (X + Y) на 2.
Необходима и здесь коррекция, рассмотренная в случае 2, то есть вычитание 2 из предварительного результата (исключение в нем единицы с весом 21).
Достоинства операций суммирования чисел в обратном и дополнительном кодах:
Недостаток: невозможно фиксировать переполнение.
Отметим, что в современных ЭВМ вся числовая информация со знаком записывается в дополнительном коде. Поэтому, например, число FFFFF...FFFF16 = -110.
Для быстрого перевода числа из прямого кода в дополнительный или наоборот, из дополнительного кода в прямой можно воспользоваться очень простым правилом.
Как уже указывалось, положительные числа в прямом и дополнительном кодах записываются одинаково. Так что здесь никаких проблем не возникает.
Для отрицательных чисел при переводе можно воспользоваться следующим правилом. Знак отрицательного числа, единица, естественно, сохраняется. А цифровые разряды меняются слева направо на противоположные до последней единицы в числе. Последняя единица и все следующие за ней разряды сохраняются:
0.10101100дк = 0.10101100пк; 0.00110011пк = 0.00110011дк.
1.10101100дк = 1.01010100пк; 1.00110011пк = 1.11001101дк.
Это правило вытекает из общего механизма перевода отрицательных чисел из прямого кода в дополнительный и наоборот. Первый шаг такого действия – инвертирование всех разрядов цифровой части (напомним, речь идет об отрицательных числах). При этом стоящие в конце числа нули станут единицами. На втором шаге к младшему разряду полученного результата добавляется единица. Это вызовет перенос, который будет распространяться до того разряда, который в новом числе равен нулю, а в исходном, следовательно, равен единице. Преобразование закончено.
Прежде всего, отметим, что переполнение разрядной сетки при суммировании чисел с фиксированной запятой возможно лишь для операндов, имеющих одинаковые знаки, так как, в противном случае, модуль результата окажется меньше модуля любого из операндов и, следовательно, переполнения не будет.
В связи с этим, факт наличия переполнения достаточно просто определить по изменению знака результата по сравнению со знаками операндов:
$$OV= Зн\overline{X} \;\And\; Зн\overline{Y} \;\And\; P \vee ЗнX\; \And\; ЗнY\; \And\; \overline{P},$$где P – перенос за пределы знакового разряда.
В модифицированных кодах кодирование знака осуществляется 2-мя разрядами:
"+" кодируется как "00"
"-" кодируется как "11".
При этом изображение числа X в этих кодах определяется равенствами:
$$\left[X\right]_{МДК}=\begin{cases}X, если \; X\geq0;\\4+X, если \; X \lt 0\end{cases}$$ $$\left[X\right]_{МОК}=\begin{cases}X, если \; X\geq0;\\4+X-2^n, если \; X \leq 0\end{cases} $$Эта избыточность, сохраняя все качества обычных дополнительного и обратного кодов, дополняет их способностью фиксировать переполнение.
Знаковые разряды результата "01" определяют положительное переполнение в операциях алгебраического суммирования, а "10" – отрицательное.
При этом основная методика выполнения операций алгебраического суммирования в обратном и дополнительном кодах не меняется:
Данный метод, при всей его простоте и наглядности, практического применения в ЭВМ не нашел. В основном, это связано с его большой избыточностью при кодировании данных и потерями времени при выполнении операции и последующей интерпретации результата.
В настоящее время практически во всех компьютерах роль модифицированных кодов выполняют переносы, идущие в знаковый и из знакового разряда. Определение факта наличия переполнения выполняется практически одновременно с выполнением самой операции суммирования по следующей формуле:
$$OV = C_7 \oplus C_8,$$на примере восьмиразрядных операндов, где C7 – перенос в старший (знаковый) разряд, а C8 – перенос из знакового разряда.
Так при сложении операндов
произойдет переполнение разрядной сетки результата:
$$OV = C_7 \oplus C_8 =0 + 1 =1,$$а при сложении операндов
нет, так как в данном случае: $$OV = C_7 \oplus C_8 =1 \oplus 1 =0,$$.
Такой подход требует использования всего лишь одного дополнительного элемента – "сумма по модулю два" – в сумматоре и практически не снижает его быстродействия.
В лекции рассмотрено представление чисел в прямом, обратном и дополнительном кодах. Особое внимание уделено дополнительному коду представления числа как наиболее распространенному в современных компьютерах. Показаны особенности алгебраического суммирования чисел в обратном и дополнительном кодах при различных сочетаниях операндов. Рассмотрены механизмы фиксации переполнения при выполнении операции алгебраического суммирования чисел.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.