перевод отрицательных чисел в дополнительный код
Представление чисел в ЭВМ
Целые числа
Для числа +1101 :
Прямой код | Обратный код | Дополнительный код |
0,0001101 | 0,0001101 | 0,0001101 |
Вещественные числа (числа с плавающей точкой)
0.15625 = 001012
446.15625 = 110111110,001012 = 1,1011111000101*2 8
Знак S = 0
Порядок P = 8 + 1023 = 103110 = 100000001112
Мантисса: 1011111000101
Для числа с двойной точностью мантисса занимает 52 разряда. Добавляем нули.
Мантисса: 1011 1110 0010 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000
Запишем число:
0 10000000111 1011 1110 0010 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000
В шестнадцатеричной системе счисления: 407BE2800000000016
455,375 = 111000111,01102 = 1,110001110110*2 8 2
Дан код величины типа Double. Преобразуйте его число.
а) 408B894000000000;
Представим в двоичном коде:
010000001000 1011 1000 1001 0100 0000 0000 0000 0000 0000 0000 0000 0000 0000
где
S = 0 (положительное число)
P = 100000010002 = 1032 – 1023 = 9
M = 10111000100101
N = 1,10111000100101
С учетом P = 9, N = 1101110001,00101
1101110001 = 2 9 *1 + 2 8 *1 + 2 7 *0 + 2 6 *1 + 2 5 *1 + 2 4 *1 + 2 3 *0 + 2 2 *0+ 2 1 *0 + 2 0 *1 = 512 + 256 + 0 + 64 + 32 + 16 + 0 + 0 + 0 + 1 = 881
б) C089930000000000.
Представим в двоичном коде:
1 10000001000 100110010011000000000000000000000000 0000 0000 0000 0000
где
S = 1 (отрицательное число)
P = 100000010002 = 1032 – 1023 = 9
M = 100110010011
N =1,100110010011
С учетом P = 9, N = 1100110010,011
1100110010 = 2 9 *1 + 2 8 *1 + 2 7 *0 + 2 6 *0 + 2 5 *1 + 2 4 *1 + 2 3 *0 + 2 2 *0 + 2 1 *1 + 2 0 *0 = 512 + 256 + 0 + 0 + 32 + 16 + 0 + 0 + 2 + 0 = 818
Прямой код (представление числа)
Прямой код (представление числа)
Прямой код — способ представления двоичных чисел с фиксированной запятой в компьютерной арифметике. Главным образом используется для записи положительных чисел.
Содержание
Представление числа в прямом коде
При записи числа в прямом коде старший разряд является знаковым разрядом. Если его значение равно 0 — то число положительное, если 1 — то отрицательное. В остальных разрядах (которые называются цифровыми разрядами) записывается двоичное представление модуля числа.
Функция кодирования двоичных чисел (в том числе целых чисел и смешанных дробей) в прямом коде имеет вид:
где n — номер знакового разряда. В частности, при кодировании правильных двоичных дробей (то есть чисел − 1 ), n = 0 и функция кодирования принимает вид:
Величина числа A в прямом коде определяется по следующей формуле:
Как видно из последней формулы, знаковый разряд в прямом коде не имеет разрядного веса. При выполнении арифметических операций это приводит к необходимости отдельной обработки знакового разряда в прямом коде.
Примеры
Применение прямого кода
В информатике прямой код используется главным образом для записи неотрицательных целых чисел. Его легко получить из представления целого числа в любой другой системе счисления. Для этого достаточно перевести число в двоичную систему счисления, а затем заполнить нулями свободные слева разряды разрядной сетки машины.
Однако, у прямого кода есть два недостатка:
Выполнение арифметических операций над числами в прямом коде затруднено: например, даже для сложения чисел с разными знаками требуется кроме сумматора иметь специальный блок-«вычитатель», сложность реализации которого, такая же, как и обычного сумматора. Кроме того, при выполнении арифметических операций требуется особо обрабатывать значащий разряд, так как он не имеет веса. Также требуется обработка «отрицательного нуля». Таким образом, выполнение арифметических операций над числами в прямом коде потребует сложной архитектуры центрального процессора и в общем является неэффективным.
Гораздо более удобным для выполнения арифметических операций является дополнительный код.
Диапазон
Арифметических операций в прямом обратном и дополнительном коде
(Тут немного теории чтоб на уши подсесть ему, а все операции на семинарах были).
Представление положительных и отрицательных чисел в памяти компьютера. Прямой и дополнительный код числа
Прямой код – это представление числа в двоичной системе счисления, при котором первый (старший) разряд отводится под знак числа. Если число положительное, то в левый разряд записывается 0; если число отрицательное, то в левый разряд записывается 1.
Таким образом, в двоичной системе счисления, используя прямой код, в восьмиразрядной ячейке (байте) можно записать семиразрядное число. Например:
1 00011010 – отрицательное число
При этом в вычислительной технике прямой код используется почти исключительно для представления положительных чисел.
Для отрицательных чисел используется так называемый дополнительный код. Это связано с удобством выполнения операций над числами электронными устройствами компьютера.
В дополнительном коде, также как и прямом, первый разряд отводится для представления знака числа. Прямой код используется для представления положительных чисел, а дополнительный – для представления отрицательных. Поэтому, если в первом разряде находится 1, то мы имеем дело с дополнительным кодом и с отрицательным числом.
Все остальные разряды числа в дополнительном коде сначала инвертируются, т.е. заменяются противоположными (0 на 1, а 1 на 0). Например, если 1 0001100 – это прямой код числа, то при формировании его дополнительного кода, сначала надо заменить нули на единицы, а единицы на нули, кроме первого разряда. Получаем 1 1110011. Но это еще не окончательный вид дополнительного кода числа.
Далее следует прибавить единицу к получившемуся инверсией числу:
1 1110011 + 1 = 1 1110100
В итоге и получается число, которое принято называть дополнительным кодом числа.
Причина, по которой используется дополнительный код числа для представления отрицательных чисел, связана с тем, что так проще выполнять математические операции. Например, у нас два числа, представленных в прямом коде. Одно число положительное, другое – отрицательное и эти числа нужно сложить. Однако просто сложить их нельзя. Сначала компьютер должен определить, что это за числа. Выяснив, что одно число отрицательное, ему следует заменить операцию сложения операцией вычитания. Потом, машина должна определить, какое число больше по модулю, чтобы выяснить знак результата и определиться с тем, что из чего вычитать. В итоге, получается сложный алгоритм. Куда проще складывать числа, если отрицательные преобразованы в дополнительный код. Это можно увидеть на примерах ниже.
Операция сложения положительного числа и отрицательного числа, представленного в прямом коде
Прямой код числа 5: 0 000 0101
Два исходных числа сравниваются. В разряд знака результата записывается знак большего исходного числа.
Если числа имеют разные знаки, то вместо операции сложения используется операция вычитания из большего по модулю значения меньшего. При этом первый (знаковый) разряд в операции не участвует.
Операция сложения положительного числа и отрицательного числа, представленного в дополнительном коде
Прямой код числа 5: 0 000 0101
Прямой код : 1 000 0111
Инверсия : 1 111 1000
Добавление единицы: 1 111 1001
Проверка результата путем преобразования к прямому коду.
Дополнительный код: 1 111 1110
Вычитание единицы : 1 111 1101
Арифметические операции в двоичной системе счисления
В двоичной системе счисления арифметические операции выполняются по тем же правилам, что и в десятичной системе счисления, т.к. они обе являются позиционными (наряду с восьмеричной, шестнадцатеричной и др.).
Сложение одноразрядных двоичных чисел выполняется по следующим правилам:
В последнем случае, при сложении двух единиц, происходит переполнение младшего разряда, и единица переносится в старший разряд. Переполнение возникает в случае, если сумма равна основанию системы счисления (в данном случае это число 2) или больше его (для двоичной системы счисления это не актуально).
Сложим для примера два любых двоичных числа:
Вычитание одноразрядных двоичных чисел выполняется по следующим правилам:
Умножение одноразрядных двоичных чисел выполняется по следующим правилам:
Деление выполняется так же как в десятичной системе счисления:
Алгебра логики: Основные понятия, Функции алгебры логики (ФАЛ)
Булевой (логической) переменной называют переменную, принимающую значение из множества <0,1>. Название «логическая» следует из того, что её значения трактуются чаще всего как «истина» (для 1) и «ложь» (для 0).
Функцией алгебры логики (переключательной или булевой функцией) от n переменных называют однозначное отображение множества всевозможных наборов значений n булевых переменных в множество <0,1>.
Такую функцию можно представить в виде таблицы из n+1столбцов и 2 n строк. Эта таблица называется таблицей истинности.
Наборы значений переменных располагают в лексикографическом порядке (в порядке возрастания),как в примере в табл. 5.1 для n = 3.
Таблица 5.1
|
Второй способ описания функции состоит в том. что перечисляются наборы значений, на которых функция равна 1 (множество Т1), или равна 0 (множество Т0).
Для приведённого примера функцию можно представить как Т1=<001,010,100, 111>.
Определение. Булева функция существенно зависит от переменной хi, если найдутся два набора значений переменных, отличающиеся только i-й компонентой, на которых значения функции не совпадают. Переменная, от которой функция существенно не зависит, называется несущественной или мнимой для данной функции.
Пример. Пусть функция на наборах значений переменных и равна, соответственно, 1 и 0. Эта функция существенно зависит от второй переменной, потому что её значение на этих наборах определяется только значением этой переменной.
Будем считать, что функция не изменится, если в нее добавить или из нее убрать любое количество несущественных переменных.
Таблица 5.2
|
Среди четырех функций одной переменной, приведенных в табл.5.2, две функции, первая и последняя, являются константами (не зависящими ни от одной переменной). Их обозначают соответственно как 0 и 1. Вторая функция повторяет переменную. Третья противоположна ей, называется инверсией и обозначается `x.
Пусть [n] – число функций, существенно зависимых от n переменных. Тогда [1] = 2, [0] = 2. Для любого n это число можно подсчитать по рекуррентной формуле
Так, для n = 2 [2]=16-2-2×2=10. Для n=3 [3]=256-2-3×2-3×10=218.
Для чего предназначены обратный и дополнительный коды?
При выполнении арифметических операций в ЭВМ применяют специальные коды для представления чисел (с целью упрощения арифметических операций) : прямой, обратный и дополнительный коды чисел. Например, упрощается определение знака результата операции, вычитание есть сложение кодов, облегчено определение переполнения разрядной сетки.
Прямой код (представление в виде абсолютной величины со знаком) двоичного числа – это само двоичное число, в котором все цифры, изображающие его значение, записываются как в математической записи, а знак числа записывается двоичной цифрой.
Пример: Дано число X=-1011. Перевести число в прямой код.
Обратный код положительного числа совпадает с прямым, а при записи отрицательного числа все его цифры, кроме цифры, изображающей знак числа, заменяются на противоположные (0 заменяется на 1, а 1 – на 0).
Пример: Дано число X=-1011. Перевести число в обратный код.
Дополнительный код (представление в виде дополнения до двойки) положительного числа совпадает с прямым, а код отрицательного числа образуется как результат увеличения на 1 его обратного кода.
Иными словами, процесс построения дополнительного кода отрицательного числа можно разбить на два этапа – построить обратный код, а затем из него построить дополнительный.
Пример: Дано число X=-1011. Перевести в дополнительный код.
http://microkontroller.ru/programmirovanie-mikrokontrollerov-avr/pryamoy-obratnyiy-dopolnitelnyiy-kod-dvoichnogo-chisla/
.
Двоичная арифметика. Прямой, обратный, дополнительный и модифицированный коды
В ЭВМ в целях упрощения выполнения арифметических операций применяют специальные коды для представления чисел. Использование кодов позволяет свести операцию вычитания чисел к арифметическому сложению кодов этих чисел. Применяются прямой, обратный и дополнительный коды чисел. Прямой код используется для представления отрицательных чисел в запоминающем устройстве ЭВМ, а также при умножении и делении. Обратный и дополнительный коды используются для замены операции вычитания операцией сложения, что упрощает устройство арифметического блока ЭВМ.
К кодам выдвигаются следующие требования:
1) Разряды числа в коде жестко связаны с определенной разрядной сеткой.
2) Для записи кода знака в разрядной сетке отводится фиксированный, строго определенный разряд. Например, если за основу представления кода взят один байт, то для представления числа будет отведено 7 разрядов, а для записи кода знака один разряд.
Прямой код. Прямой код двоичного числа совпадает по изображению с записью самого числа. Значение знакового разряда для положительных чисел равно 0, а для отрицательных чисел 1.
Знаковым разрядом обычно является крайний левый разряд в разрядной сетке. В дальнейшем при записи кода знаковый разряд от цифровых условимся отделять запятой. Если количество разрядов кода не указано будем предполагать, что под запись кода выделен один байт.
Обратный код. Обратный код для положительного числа совпадает с прямым кодом. Для отрицательного числа все цифры числа заменяются на противоположные (1 на 0, 0 на 1), а в знаковый разряд заносится единица.
Дополнительный код. Дополнительный код положительного числа совпадает с прямым кодом. Для отрицательного числа дополнительный код образуется путем получения обратного кода и добавлением к младшему разряду единицы.
Прямой код Обратный код Дополнительный код
0,0001101 0,0001101 0,0001101
Прямой код Обратный код Дополнительный код
1,0001101 1,1110010 1,1110011
4.3.2 Особенности сложения чисел в обратном и дополнительном кодах
При сложении чисел в дополнительном коде возникающая единица переноса в знаковом разряде отбрасывается.
При сложении чисел в обратном коде возникающая единица переноса в знаковом разряде прибавляется к младшему разряду суммы кодов.
Если результат арифметических действий является кодом отрицательного числа, необходимо преобразовать его в прямой код. При этом обратный код преобразуется в прямой заменой цифр во всех разрядах кроме знакового на противоположные. Дополнительный код преобразуется в прямой также, как и обратный, с последующим прибавлением единицы к младшему разряду.
Сложить двоичные числа X и Y в обратном и дополнительном кодах.
1) Сложим числа, пользуясь правилами двоичной арифметики:
2) Сложим числа, используя коды:
Прямой код | Сложение в обратном коде | Сложение в дополнительном коде |
| | |
Так как результат сложения является кодом положительного числа (знак 0), то (X+Y)обр=(X+Y)доп=(X+Y)пр.
1) Сложим числа, пользуясь правилами двоичной арифметики:
2) Сложим числа, используя коды:
Прямой код | Сложение в обратном коде | Сложение в дополнительном коде |
| | |
Так как сумма является кодом отрицательного числа (знак 1), то необходимо перевести результаты в прямой код:
— из обратного кода
(X+Y)обр=1,1110100 (X+Y)пр=1,0001011;
4.3.3 Модифицированные обратный и дополнительный коды.
При переполнении разрядной сетки, происходит перенос единицы в знаковый разряд. Это приводит к неправильному результату, причем положительное число, получившееся в результате арифметической операции может восприниматься как отрицательное (так как в знаковом разряде «1») и наоборот. Например:
Рассмотрим предыдущий пример, выполнив сложение в модифицированном обратном коде:
|
Рассмотрим ещё один пример.
1) Переведем X и Y в модифицированный дополнительный код:
2) Выполним сложение:
Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет