Как найти прямой код чисел

Двоичное число: прямой, обратный и дополнительный коды

Прямой код двоичного числа
Обратный код двоичного числа
Дополнительный код двоичного числа

Прямой, обратный и дополнительный коды двоичного числа – способы представления двоичных чисел с фиксированной запятой в компьютерной (микроконтроллерной) арифметике, предназначенные для записи отрицательных и неотрицательных чисел

Прямой, обратный и дополнительный код
Мы знаем, что десятичное число можно представить в двоичном виде. К примеру, десятичное число 100 в двоичном виде будет равно 1100100, или в восьмибитном представлении 0110 0100. А как представить отрицательное десятичное число в двоичном виде и произвести с ним арифметические операции? Для этого и предназначены разные способы представления чисел в двоичном коде.
Сразу отмечу, что положительные числа в двоичном коде вне зависимости от способа представления (прямой, обратный или дополнительный коды) имеют одинаковый вид.


Прямой код

Прямой код – способ представления двоичных чисел с фиксированной запятой. Главным образом используется для записи неотрицательных чисел

Прямой код используется в двух вариантах.
В первом (основной) – для записи только неотрицательных чисел:

Неотрицательные числа в прямом кодеВ этом варианте (для восьмибитного двоичного числа) мы можем записать максимальное число 255 (всего чисел 256 – от 0 до 255)

Второй вариант – для записи как положительных, так и отрицательных чисел.
В этом случае старший бит (в нашем случае – восьмой) объявляется знаковым разрядом (знаковым битом).
При этом, если:
– знаковый разряд равен 0, то число положительное
– знаковый разряд равен 1, то число отрицательное

Знаковый разряд прямого кода

В этом случае диапазон десятичных чисел, которые можно записать в прямом коде составляет от – 127 до +127:

Двоичные числа в прямом кодеПодводя итоги вопроса, не влезая в его дебри, скажу одно:
Прямой код используется главным образом для представления неотрицательных чисел.
 Использование прямого кода для представления отрицательных чисел является неэффективным – очень сложно реализовать арифметические операции и, кроме того, в прямом коде два представления нуля – положительный ноль и отрицательный ноль (чего не бывает):


Обратный код

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

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

При 8-битном двоичном числе – знаковый бит (как и в прямом коде) старший (8-й)

Двоичное число в обратном коде

Диапазон десятичных чисел, который можно записать в обратном коде от -127 до + 127

Арифметические операции с отрицательными числами в обратном коде:

(Арифметические операции с двоичными числами)

1-й пример (для положительного результата)
Дано два числа:
100 = 0110 0100
-25 = – 0001 1001
Необходимо их сложить:
100 + (-25) = 100 – 25 = 75

1-й этап
Переводим число -25 в двоичное число в обратном коде:
25 = 0001 1001
-25= 1110 0110
и складываем два числа:
0110 0100 (100) + 1110 0110 (-25) = 1 0100 1010, отбрасываем старшую 1 (у нас получился лишний 9-й разряд – переполнение), = 0100 1010
2-й этап
Отброшенную в результате старшую единицу прибавляем к результату:
0100 1010 + 1 = 0100 1011 (знаковый бит =0, значит число положительное), что равно 75 в десятичной системе

2-й пример (для отрицательного результата)
Дано два числа:
5 = 0000 0101
-10 = – 0000 1010
Необходимо их сложить:
5 + (-10) = 5 – 10 = -5

1-й этап
Переводим число -10 в двоичное число в обратном коде:
10 = 0000 1010
-10= 1111 0101
и складываем два числа:
0000 0101 (5) + 1111 0101 (-10) = 1111 1010 (знаковый бит =1, значит число отрицательное)

2-й этап
Раз результат получился отрицательный, значит число представлено в обратном коде.
Переводим результат в прямой код (путем инвертирования значения, знаковый бит не трогаем):
1111 1010 —-> 1000 0101
Проверяем:
1000 0101 = – 0000 0101 = -5


Обратный код решает проблему сложения и вычитания чисел с различными знаками, но и имеет свои недостатки:
– арифметические операции проводятся в два этапа
– как и в прямом коде два представления нуля – положительный и отрицательный


Дополнительный код

Дополнительный код – наиболее распространенный способ представления отрицательных чисел. Он позволяет заменить операцию вычитания на операцию сложения и сделать операции сложения и вычитания одинаковыми для знаковых и беззнаковых чисел.

В дополнительном коде (как и в прямом и обратном) старший разряд отводится для представления знака числа (знаковый бит).

Диапазон десятичных чисел которые можно записать в дополнительном коде от -128 до +127. Запись положительных двоичных чисел в дополнительном коде та-же, что и в прямом и обратном кодах.

Представление чисел в дополнительном коде

Дополнительный код отрицательного числа можно получить двумя способами
1-й способ:
– инвертируем значение отрицательного числа, записанного в прямом коде (знаковый бит не трогаем)
– к полученной инверсии прибавляем 1
Пример:
Дано десятичное число -10
Переводим в прямой код:
10 = 0000 1010 —-> -10 = 1000 1010
Инвертируем значение (получаем обратный код):
1000 1010 —-> 1111 0101
К полученной инверсии прибавляем 1:
1111 0101 + 1 = 1111 0110 – десятичное число -10 в дополнительном коде

2-й способ:
Вычитание числа из нуля
Дано десятичное число 10, необходимо получить отрицательное число (-10) в дополнительном двоичном коде
Переводим 10 в двоичное число:
10 = 0000 1010
Вычитаем из нуля:
0 – 0000 1010 = 1111 0110 – десятичное число -10 в дополнительном коде

Дополнительный код отрицательного числа

Арифметические операции с отрицательными числами в дополнительном коде

Дано: необходимо сложить два числа -10 и 5
-10 + 5 = -5
Решение:
5 = 0000 0101
-10 = 1111 0110 (в дополнительном коде)
Складываем:
1111 0110 + 0000 0101 = 1111 1011, что соответствует числу -5 в дополнительном коде

Как мы видим на этом примере – дополнительный код отрицательного двоичного числа наиболее подходит для выполнения арифметических операций сложения и вычитания отрицательных чисел.


Вывод:
1. Для арифметических операций сложения и вычитания положительных двоичных чисел наиболее подходит применение прямого кода
2. Для арифметических операций сложения и вычитания отрицательных двоичных чисел наиболее подходит применение дополнительного кода


Предыдущие статьи:
1. Микроконтроллеры – первый шаг
2. Системы счисления: десятичная, двоичная и шестнадцатиричная
3. Логические операции, логические выражения, логические элементы
4. Битовые операции


(39 голосов, оценка: 4,69 из 5)

Загрузка…


Тема 3: Представление
целых чисел в компьютере
.

Представление числовой информации в
компьютере

Любая информация (числа,
текстовая, графическая и т. д.) представляется
в ЭВМ в виде двоичных кодов фиксированной
или переменной длины. Отдельные элементы
двоичного кода, имеющие значение 0 или
1, называют битами.
Двоичный код состоящий из 8 разрядов
носит название байта.

Целые числа могут
представляться в компьютере со знаком
или без знака.

Представление целых чисел без знака
в компьютере

Целые числа без знака обычно  занимают
 в  памяти  компьютера  один,
два или 4 байта.    

В  однобайтовом  формате
 числа принимают  значения  от 
000000002  
до   111111112.

В двубайтовом формате —
от  00000000 000000002  
до   11111111 111111112.

В четырехбайтовом –  от
00000000 00000000 00000000 000000002
до 11111111 1111111 11111111 111111112

Диапазоны значений целых чисел без
знака

Формат
числа в байтах 

Диапазон 

Запись с
порядком

Обычная
запись

1

0 … 28–1

0 … 255

2

0 … 216–1

0 … 65535

4

0 … 232–1

0…429967295

Например,
в однобайтовом формате число 62=1111102
имеет вид:

В двубайтовом формате число 1402=101011110102
имеет вид:

Пример 1. Для хранения целого числа
без знака используется один

байт. Записать представление числа 19 в
компьютере.

1 шаг: Переведем число 19 из десятичной
системы счисления в двоичную.

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

0

0

0

1

0

0

1

1

Задания.

1. Запишите числа в беззнаковом коде
(формат 1 байт):

 а) 31;      б)
163;    в) 65;    г) 128. 

2. Найдите десятичные
представления чисел, записанных в
беззнаковом коде:

 а) 0 1011000;     
б) 1 0011011;     в) 0 1101001;     
г) 1 1000000. 

Представление целых чисел со знаком

Так же как беззнаковые целые числа целые
со знаком обычно  занимают  в
 памяти  компьютера  один, два
или 4 байта.

Диапазоны значений целых чисел со
знаком

Формат
числа в байтах

Диапазон

Запись с
порядком

Обычная
запись

1

–27 …
27–1 

–128 … 127 

2

–215 …
215–1 

–32768 …
32767

4

–231 …
231–1 

–2147483648 …
2147483647

Самый левый (старший бит)
разряд определяет знак числа. 
 Если
он равен 0, число положительное, если 1,
то отрицательное.

Например,
в однобайтовом формате число 46=1011102
имеет вид:

В ЭВМ в целях упрощения
выполнения арифметических операций
применяют специальные коды для
представления чисел. Использование
кодов позволяет свести операцию вычитания
чисел к арифметическому сложению кодов
этих чисел. Применяются прямой,
обратный
и дополнительный
коды чисел. Дополнительный код используется
для хранения чисел в запоминающем
устройстве ЭВМ. Обратный и дополнительный
коды используются для замены операции
вычитания операцией сложения, что
упрощает устройство арифметического
блока ЭВМ.

Прямой код.
Прямой код двоичного числа совпадает
по изображению с записью самого числа.
Значение знакового разряда для
положительных чисел равно 0, а для
отрицательных чисел 1.

Обратный код.
Обратный код для
положительного числа совпадает с прямым
кодом. Для отрицательного числа все
цифры числа заменяются на противоположные
(1 на 0, 0 на 1), а в знаковый разряд заносится
единица.

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

Например, в однобайтовом формате числа
27 и -27 имеют вид:

Число

Прямой
код

Обратный
код

Дополнительный
код

27

00011011

00011011

00011011

-27

10011011

11100100

11100101

Пример 1. Найти прямой, обратный и
дополнительный код представления числа
13 в однобайтном формате.

1 шаг: Переведем число 13 из десятичной
системы счисления в двоичную.

2 шаг: Для представления
числа в компьютере выделен 1 байт. Старший
бит занимает знак числа – 0. Сам код
числа должен занимать 7 бит. Таким образом
прямой код числа 13

0

0

0

0

1

1

0

1

Так как для положительных чисел прямой,
обратный и дополнительный код совпадает,
то ответ 00001101.

Пример 2. Найти прямой, обратный и
дополнительный код представления числа
-23 в однобайтовом формате.

1 шаг: Переведем число -23 из десятичной
системы счисления в двоичную. Получим

-2310=-101112

2 шаг: Прямой код числа в однобайтовом
формате, учитывая, что старший бит
занимает знак числа -1, имеет вид

1

0

0

1

0

1

1

1

3 шаг: Найдем обратный код числа -23,
заменив все цифры числа на
противоположные (1 на 0, 0 на 1), а в знаковый
разряд заносится единица. Имеем,

1

1

1

0

1

0

0

0

4 шаг: Найдем дополнительный код
числа -23, добавив 1 к младшему
разряду обратного кода.

1

1

1

0

1

0

0

1

Ответ:
прямой код – 10010111; обратный – 11101000;
дополнительный – 11101001.

Так
вот, прямой
обратный и дополнительный код – это
модели представления целых чисел
,
как положительных, так и отрицательных.
Примеры записи некоторых чисел во всех
трех восьмиразрядных кодах показаны в
таблице ниже.

Число

Прямой
код

Обратный
код

Дополнительный
код

0

00000000

00000000

00000000

1

00000001

00000001

00000001

-1

10000001

11111110

11111111

5

00000101

00000101

00000101

-5

10000101

11111010

11111011

8

00001000

00001000

00001000

-8

10001000

11110111

11111000

120

01111000

01111000

01111000

-120

11111000

10000111

10001000

127

01111111

01111111

01111111

-127

11111111

10000000

10000001

Во
всех трех кодах старший разряд указывает
на знак числа и он равен единице, если
число отрицательное и нулю в противном
случае. Остальные разряды содержат
представление модуля числа. Различие
между кодами наблюдается именно в
способах представления модуля. Для
положительного числа модуль во всех
трех кодах представляется одинаково –
это просто естественная запись двоичного
числа
.
Для отрицательных чисел, в обратном
коде это просто поразрядная инверсия
прямого кода, а в дополнительном – к
обратному коду, как к числу, просто
прибавляется единица.

Распространёнными
формами представления чисел со знаками
является их представление в прямом,
обратном и дополнительном коде.
Прямой
код числа образуется кодированием знака
числа нулём, если число положительно и
единицей, если число отрицательно (для
двоичной системы)
Для общего случая
(q – 1) – если число отрицательно, и 0 – если
число положительно. q – основание системы
счисления.
Код знака записывается
перед старшей цифрой числа и отделяется
от неё точкой:
-1.01 = 1.101
Прямой, обратный
и дополнительный коды положительных
чисел совпадают между собой.
Обратный
код отрицательного числа образуется
из прямого кода, заменой его цифр на их
дополнения до величины q-1. Код знака
сохраняется без изменения.
Пример
:
+12310 =
0.123пр =
0.123об.
-12310 =
9.123пр =
9.876об
+3А7С0016 =
0.3А7С00пр =
0.3А7С00об.
-3А7С0016 =
F.3А7С00пр=
F.C583FFоб.
-1012 =
1.101пр =
1.010об.
Замена
цифр их дополнениями для двоичной
системы совпадает с операцией инверсии,
то есть нули заменяются единицами,
единицы – нулями. Знак принимает значение,
равное единице.
Дополнительный код
отрицательного числа образуется из
обратного увеличением на 1 его младшего
разряда. При этом перенос из знакового
разряда игнорируется.
Пример:
+23610 =
0.236пр.=
0.236об.=
0.236доп.
-23610 =
9.236пр.=
9.763об.=
9.764доп.
-1012=
1.101пр.=
1.010об=
1.011доп.
-3А7С16=
F.3А7Спр=
F.C583об.=
F.C584доп.
Правила
перевода из прямого кода в обратный и
из обратного в прямой, а также из прямого
в дополнительный и из дополнительного
в прямой совпадают между собой.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Машинные коды[править]

Все операции в ЭВМ выполняются над числами, представленными специальными машинными кодами. Их использование позволяет обрабатывать знаковые разряды чисел так же, как и значащие разряды, а также заменять операцию вычитания операцией сложения.

Различают следующие коды двоичных чисел:

  • прямой код (П),
  • обратный код (ОК),
  • дополнительный код (ДК).

Прямой код[править]

Прямой код двоичного числа образуется из абсолютного значения этого числа и кода знака (0 или 1) перед его старшим числовым разрядом.

Пример.

А10 = +10; А2 = +1010; [А2]п = 0|1010

В10 = –15; В2 = –1111; [В2]п = 1|1111

Обратный код[править]

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

Пример.

А10 = +10; А2 = +1010; [А2]ок = [А2]п = 0|1010

В10 = –15; В2 = –1111; [В2]ок = 1|0000

Свое название обратный код получил потому, что коды цифр отрицательного числа заменены на инверсные. Наиболее важные свойства обратного кода чисел:

  • сложение положительного числа С с его отрицательным значением в обратном коде дает т.н. машинную единицу МЕок=1|11…11, состоящую из единиц в знаковом и в значащих разрядах числа;
  • нуль в обратном коде имеет двоякое значение. Он может быть как положительным числом – 0|00…00, так и отрицательным 1|11…11. Значение отрицательного числа совпадает с МЕок. Двойственное представление 0 явилось причиной того, что в современных ЭВМ все числа представляются не обратным, а дополнительным кодом.

Дополнительный код[править]

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

Пример.

А10 = +10; А2 = +1010; [А2]дк = [А2]ок = [А2]п = 0|1010

В10 = –15; В2 = –1111; [В2]дк = [В2]ок + 20 = 1|0000+1 = 1|0001

Основные свойства дополнительного кода:

• сложение дополнительных кодов положительного числа С с его отрицательным значением дает т.н. машинную единицу дополнительного кода:

МЕдк=МЕок + 20 = 10|00…00,

т.е. число 10 (два) в знаковых разрядах числа;

• дополнительный код называется так потому, что представление отрицательных чисел является дополнением прямого кода чисел до машинной единицы

МЕдк.

Модифицированные обратные и дополнительные коды[править]

Модифицированные обратные и дополнительные коды двоичных чисел отличаются соответственно от обратных и дополнительных кодов удвоением значений знаковых разрядов. Знак «+» в этих кодах кодируется двумя нулевыми знаковыми разрядами, а знак «–» – двумя единичными разрядами.

Пример.

А10 = +10; А2 = +1010; [А2]дк = [А2]ок = [А2]п = 0|1010

2]мок = [А2]мдк = 00|1010

В10 = –15; В2 = –1111; [В2]дк= [В2]ок+20 = 1|0000+1 = 1|0001

2]мок= [В2]мдк= 11|0001

Целью введения модифицированных кодов являются фиксация и обнаружение случаев получения неправильного результата, когда значение результата превышает максимально возможный результат в отведенной разрядной сетке машины. В этом случае перенос из значащего разряда может исказить значение младшего знакового разряда. Значение знаковых разрядов «01» свидетельствует о положительном переполнении разрядной сетки, а «10» – об отрицательном переполнении. В настоящее время практически во всех компьютерах роль сдвоенных разрядов для фиксации переполнения разрядной сетки играют переносы, идущие в знаковый и из знакового разряда.

Арифметические действия в машинных кодах.[править]

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

Требуемая операция Необходимое преобразование
А+В А+В
А-В А+(-В)
-А+В (-А)+В
-А-В (-А)+(-В)

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

  1. Слагаемые должны иметь одинаковое число разрядов. Для выравнивания разрядной сетки слагаемых можно дописывать незначащие нули слева к целой части числа и незначащие нули справа к дробной части числа.
  2. Знаковые разряды участвуют в сложении так же, как и значащие.
  3. Необходимые преобразования кодов производятся с изменением знаков чисел. Приписанные незначащие нули изменяют свое значение при преобразованиях по общему правилу.
  4. При преобразовании единицы переноса из старшего знакового разряда, в случае использования ОК, эта единица складывается с младшим числовым разрядом. При использовании ДК единица переноса теряется. Знак результата формируется автоматически, результат представляется в том коде, в котором представлены исходные слагаемые.

Пример 1. Сложить два числа: А10 = 7, В10 = 16.

А2 = +111 = +0111; В2 = +10000.

Исходные числа имеют различную разрядность, необходимо провести выравнивание разрядной сетки:

[A2]п = [A2]ок = [A2]дк = 0|00111; [В2]п = [В2]ок = [В2]дк = 0|10000.

Сложение в обратном или дополнительном коде дает один и тот же результат:

0|00111

+0|10000

———-

С2 = 0|10111

С10 = +23

Пример 2. Сложить два числа: А10 = +16, В10 = -7 в ОК и ДК.

По таблице необходимо преобразование А+(-В), в которой второй член преобразуется с учетом знака

[A2]п = [A2]ок = [A2]дк = 0|10000;

2]п = 1|111 = 1|00111; [В2]ок = 1|11000; [В2]дк = 1|11001

При сложении чисел в ОК и ДК были получены переносы в знаковый разряд и из знакового разряда. В случае ОК перенос из знакового разряда требует дополнительного прибавления единицы младшего разряда (п.4 правил). В случае ДК этот перенос игнорируется.

Практическая часть.[править]

Задание:

  1. Взять две пары десятичных двузначных целых числа: А, В, С, D. (Варианты по списку)
  2. Вычислить (А-В)ок, (В-А)дк, (С-D)ок, (D-C)дк.

Варианты

  1. Вариант — 78, 56, 11, 35;
  2. Вариант — 67, 36, 45, 22;
  3. Вариант — 21, 87, 38, 44;
  4. Вариант — 99, 26, -73, 26,
  5. Вариант — 28, 33, 42, 54;
  6. Вариант — 61, 43, 65, 41;
  7. Вариант — 11, 84, 49, 53;
  8. Вариант — 85,- 47, 43, 66;
  9. Вариант — 48, 52, 65, 88;
  10. Вариант — 26, 58, 63, 77;
  11. Вариант — 91, 22, 46, -14;
  12. Вариант — 57, 14, 69, 55;
  13. Вариант — 77, 98, 25, -88;
  14. Вариант — 46, 66, 35, 36;
  15. Вариант — 44, 37, 92, 28;
  16. Вариант — 63, 46, 83, 71;
  17. Вариант — 35, -51, 63, 24;
  18. Вариант — 25, 95, -38, 33;
  19. Вариант — 32, 29, 86, 27;
  20. Вариант — 49, 55, -73, 22
  21. Вариант — 33, -77, 53, 71;
  22. Вариант — 48, 86, 62, 42;
  23. Вариант — 69, -48, 11, 20;
  24. Вариант — 10; 82, 80, 45;
  25. Вариант — 70, 93, -27, 30;
  26. Вариант — 88, -40, 16, 83;
  27. Вариант — 64, 80, -17, 77;
  28. Вариант — 40, 46, -73, 19;
  29. Вариант — 14, -60, 11, 27;
  30. Вариант — 90, 73, -10, 20.

Как найти прямой, обратный и дополнительный код????Примеры пожалуйста:)



Гуру

(4793),
закрыт



12 лет назад

Миоко Таканава

Гений

(51590)


12 лет назад

Для положительных чисел прямой, обратный и дополнительный коды совпадают.
Для отрицательных:
В прямом коде просто старший разряд устанавливается в единицу. Пример для 8 разрядов:
+98(10) -> 01100010(2)
-98(10) -> 11100010(2)
В обратном коде все разряды инвертируются. 0 заменяются 1, а единицы нулями. Пример:
+98(10) -> 01100010(2)
-98(10) -> 10011101(2)
В дополнителный код отрицательные числа преобразуются сначала в обратный. Затем к получившемуся коду прибавляется единица:
-98(10) -> 10011101(2)+1=10011110(2)

Сали-Мали

Просветленный

(29246)


12 лет назад

Двоичное 8-ми разрядное число с отрицательным знаком: x= – 01011101
Получаем прямой код: минус – знак числа записывается ввиде 1, коды числа записываются без изменения:
X пр. = 1.01011101.
Для преобразования прямого кода двоичного отрицательного числа в обратный код знаковый разряд оставить без изменения, а в остальных разрядах нули заменить на единицы, а единицы на нули:
Xобр. = 1.10100010 .
Для получения дополнительного кода необходимо к младшему разряду числа в обратном коде добавить единицу:
Хдоп. = 1.10100011.
Для положительных двоичных чисел (в знаковом разряде записывается 0): X пр. = Xобр. = Хдоп.
Читай внимательно: http://solidbase.karelia.ru/edu/zonna/3_ychebnik_5.htm

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

В англоязычной литературе именуется Sign and magnitude method.

Представление числа со знаком в прямом коде[править | править код]

При записи числа в прямом коде старший разряд (старший бит) объявляется знаковым разрядом (знаковым битом). Если знаковый бит равен 0, число положительное, иначе — отрицательное. В остальных разрядах (которые называются цифровыми разрядами) записывается двоичное представление модуля числа.

Функция кодирования двоичных чисел (в том числе целых чисел и смешанных дробей) в прямом коде имеет вид:

{displaystyle [A]_{Pi mathrm {P} }={begin{cases}A,&Ageqslant 0\2^{n}+|A|,&A<0end{cases}}}

где n — номер знакового разряда (знакового бита).
В частности, при кодировании правильных двоичных дробей (то есть чисел, удовлетворяющих неравенству -1<A<1), n=0 и функция кодирования принимает вид:

{displaystyle [A]_{Pi mathrm {P} }={begin{cases}A,&Ageqslant 0\1+|A|,&A<0end{cases}}}

Величина числа A в прямом коде определяется по следующей формуле:

A=(1-2a_{{sign}})sum _{{i=-k}}^{{n}}a_{i}p^{i}

где:

Как видно из последней формулы, знаковый разряд в прямом коде не имеет разрядного веса. При выполнении арифметических операций это приводит к необходимости отдельной обработки знакового разряда в прямом коде.

Примеры[править | править код]

Десятичное число Двоичное число Код прямой двоичный 8-разрядный Примечание
0 0 0000 0000 Положительный ноль
-0 -0 1000 0000 Отрицательный ноль
5 101 0000 0101
10 1010 0000 1010
-5 -101 1000 0101
-16 -10000 1001 0000
9/16 0.1001 0.100 1000
-9/16 -0.1001 1.100 1000
105/128 0.1101001 0.110 1001
-5/128 -0.0000101 1.000 0101

Применение прямого кода[править | править код]

В информатике прямой код используется главным образом для записи неотрицательных целых чисел. Его легко получить из представления целого числа в любой другой системе счисления. Для этого достаточно перевести число в двоичную систему счисления, а затем заполнить нулями свободные слева разряды разрядной сетки машины.

Однако при использовании для чисел со знаком у прямого кода есть два недостатка.

  • В прямом коде есть два варианта записи числа 0 (например, 00000000 и 10000000 в восьмиразрядном представлении). Второе представление называется «отрицательный ноль»
  • Использование прямого кода для представления отрицательных чисел в памяти компьютера предполагает или выполнение арифметических операций центральным процессором в прямом коде, или перевод чисел в другое представление (например, в дополнительный код) перед выполнением операций и перевод результатов обратно в прямой код (что неэффективно).

Выполнение арифметических операций над числами в прямом коде затруднено: например, даже для сложения чисел с разными знаками требуется кроме сумматора иметь специальный блок-«вычитатель», сложность реализации которого такая же, как и обычного сумматора. Кроме того, при выполнении арифметических операций требуется особо обрабатывать знаковый разряд, так как он не имеет веса. Также требуется обработка «отрицательного ноля». Таким образом, выполнение арифметических операций над знаковыми числами в прямом коде потребует более сложной архитектуры центрального процессора и в общем является неэффективным.

Гораздо более удобным для выполнения арифметических операций является дополнительный код.

Диапазон[править | править код]

(n+1)-разрядный прямой код (n цифровых разрядов и один знаковый) позволяет представлять целые числа в диапазоне {displaystyle [-(2^{n}-1);2^{n}-1]}.

(n+1)-разрядный прямой код (n цифровых разрядов и один знаковый) позволяет представлять правильные двоичные дроби в диапазоне {displaystyle [-(1-2^{-n});1-2^{-n}]}.

См. также[править | править код]

  • Обратный код
  • Дополнительный код
  • Целочисленный тип данных

Примечания[править | править код]

Литература[править | править код]

  • Behrooz Parhami. 2.1. Signed-Magnitude Representation // Computer Arithmetic: Algorithms and Hardware Designs. — New York: Oxford University Press, 2000. — P. 19—21. — 510 p. — ISBN 0-19-512583-5.
  • Самофалов К.Г., Романкевич А.М., Валуйский В.Н., Каневский Ю.С., Пиневич М.М. Прикладная теория цифровых автоматов. — К.: Вища школа, 1987. — 375 с.

Добавить комментарий