Прямой код

Поделись знанием:
Перейти к: навигация, поиск

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

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





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

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

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

<math>[A]_{\Pi \Rho} =

\begin{cases} A, & A \ge 0 \\ 2^n + |A|, & A < 0 \end{cases}</math> где <math>n</math> — номер знакового разряда (знакового бита). В частности, при кодировании правильных двоичных дробей (то есть чисел, удовлетворяющих неравенству <math>-1 < A < 1</math>), <math>n = 0</math> и функция кодирования принимает вид:

<math>[A]_{\Pi \Rho} =

\begin{cases} A, & A \ge 0 \\ 1 + |A|, & A < 0 \end{cases}</math>

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

<math>A = (1 - 2 a_{sign})\sum_{i = -k}^{n} a_i p^i</math>

где:

  • <math>i</math> — номер разряда числа; отрицательное число — номер разряда справа от запятой; положительное число — номер разряда слева от запятой;
  • <math>k</math> — количество разрядов справа от запятой (кол-во разрядов дробной части числа);
  • <math>n</math> — количество разрядов слева от запятой (кол-во разрядов целой части числа);
  • <math>a_i</math> — цифра в <math>i</math>-ом разряде;
  • <math>p</math> — основание системы счисления; равно 2 для двоичных чисел, 10 — для десятичных, 16 — для шестнадцатеричных и т. п.;
  • <math>a_{sign}</math> — значение знакового разряда (знакового бита);
  • <math>A</math> — число, имеющее <math>k</math> разрядов справа от запятой (дробная часть) и <math>n</math> разрядов слева (целая часть); учитываются только цифровые разряды.

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

Примеры

Десятичное число Двоичное число Код прямой двоичный 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 в восьмиразрядном представлении). Второе представление называется «отрицательный ноль»
  • Использование прямого кода для представления отрицательных чисел в памяти компьютера предполагает или выполнение арифметических операций центральным процессором в прямом коде, или перевод чисел в другое представление (например, в дополнительный код) перед выполнением операций и перевод результатов обратно в прямой код (что неэффективно).

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

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

Диапазон

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

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

См. также

Напишите отзыв о статье "Прямой код"

Литература

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


Отрывок, характеризующий Прямой код

– Вот, покушайте, барин, – сказал он, опять возвращаясь к прежнему почтительному тону и развертывая и подавая Пьеру несколько печеных картошек. – В обеде похлебка была. А картошки важнеющие!
Пьер не ел целый день, и запах картофеля показался ему необыкновенно приятным. Он поблагодарил солдата и стал есть.
– Что ж, так то? – улыбаясь, сказал солдат и взял одну из картошек. – А ты вот как. – Он достал опять складной ножик, разрезал на своей ладони картошку на равные две половины, посыпал соли из тряпки и поднес Пьеру.
– Картошки важнеющие, – повторил он. – Ты покушай вот так то.
Пьеру казалось, что он никогда не ел кушанья вкуснее этого.
– Нет, мне все ничего, – сказал Пьер, – но за что они расстреляли этих несчастных!.. Последний лет двадцати.
– Тц, тц… – сказал маленький человек. – Греха то, греха то… – быстро прибавил он, и, как будто слова его всегда были готовы во рту его и нечаянно вылетали из него, он продолжал: – Что ж это, барин, вы так в Москве то остались?
– Я не думал, что они так скоро придут. Я нечаянно остался, – сказал Пьер.
– Да как же они взяли тебя, соколик, из дома твоего?
– Нет, я пошел на пожар, и тут они схватили меня, судили за поджигателя.
– Где суд, там и неправда, – вставил маленький человек.
– А ты давно здесь? – спросил Пьер, дожевывая последнюю картошку.
– Я то? В то воскресенье меня взяли из гошпиталя в Москве.
– Ты кто же, солдат?
– Солдаты Апшеронского полка. От лихорадки умирал. Нам и не сказали ничего. Наших человек двадцать лежало. И не думали, не гадали.
– Что ж, тебе скучно здесь? – спросил Пьер.
– Как не скучно, соколик. Меня Платоном звать; Каратаевы прозвище, – прибавил он, видимо, с тем, чтобы облегчить Пьеру обращение к нему. – Соколиком на службе прозвали. Как не скучать, соколик! Москва, она городам мать. Как не скучать на это смотреть. Да червь капусту гложе, а сам прежде того пропадае: так то старички говаривали, – прибавил он быстро.
– Как, как это ты сказал? – спросил Пьер.
– Я то? – спросил Каратаев. – Я говорю: не нашим умом, а божьим судом, – сказал он, думая, что повторяет сказанное. И тотчас же продолжал: – Как же у вас, барин, и вотчины есть? И дом есть? Стало быть, полная чаша! И хозяйка есть? А старики родители живы? – спрашивал он, и хотя Пьер не видел в темноте, но чувствовал, что у солдата морщились губы сдержанною улыбкой ласки в то время, как он спрашивал это. Он, видимо, был огорчен тем, что у Пьера не было родителей, в особенности матери.
– Жена для совета, теща для привета, а нет милей родной матушки! – сказал он. – Ну, а детки есть? – продолжал он спрашивать. Отрицательный ответ Пьера опять, видимо, огорчил его, и он поспешил прибавить: – Что ж, люди молодые, еще даст бог, будут. Только бы в совете жить…
– Да теперь все равно, – невольно сказал Пьер.
– Эх, милый человек ты, – возразил Платон. – От сумы да от тюрьмы никогда не отказывайся. – Он уселся получше, прокашлялся, видимо приготовляясь к длинному рассказу. – Так то, друг мой любезный, жил я еще дома, – начал он. – Вотчина у нас богатая, земли много, хорошо живут мужики, и наш дом, слава тебе богу. Сам сем батюшка косить выходил. Жили хорошо. Христьяне настоящие были. Случилось… – И Платон Каратаев рассказал длинную историю о том, как он поехал в чужую рощу за лесом и попался сторожу, как его секли, судили и отдали ь солдаты. – Что ж соколик, – говорил он изменяющимся от улыбки голосом, – думали горе, ан радость! Брату бы идти, кабы не мой грех. А у брата меньшого сам пят ребят, – а у меня, гляди, одна солдатка осталась. Была девочка, да еще до солдатства бог прибрал. Пришел я на побывку, скажу я тебе. Гляжу – лучше прежнего живут. Животов полон двор, бабы дома, два брата на заработках. Один Михайло, меньшой, дома. Батюшка и говорит: «Мне, говорит, все детки равны: какой палец ни укуси, все больно. А кабы не Платона тогда забрили, Михайле бы идти». Позвал нас всех – веришь – поставил перед образа. Михайло, говорит, поди сюда, кланяйся ему в ноги, и ты, баба, кланяйся, и внучата кланяйтесь. Поняли? говорит. Так то, друг мой любезный. Рок головы ищет. А мы всё судим: то не хорошо, то не ладно. Наше счастье, дружок, как вода в бредне: тянешь – надулось, а вытащишь – ничего нету. Так то. – И Платон пересел на своей соломе.
Помолчав несколько времени, Платон встал.
– Что ж, я чай, спать хочешь? – сказал он и быстро начал креститься, приговаривая:
– Господи, Иисус Христос, Никола угодник, Фрола и Лавра, господи Иисус Христос, Никола угодник! Фрола и Лавра, господи Иисус Христос – помилуй и спаси нас! – заключил он, поклонился в землю, встал и, вздохнув, сел на свою солому. – Вот так то. Положи, боже, камушком, подними калачиком, – проговорил он и лег, натягивая на себя шинель.
– Какую это ты молитву читал? – спросил Пьер.
– Ась? – проговорил Платон (он уже было заснул). – Читал что? Богу молился. А ты рази не молишься?
– Нет, и я молюсь, – сказал Пьер. – Но что ты говорил: Фрола и Лавра?
– А как же, – быстро отвечал Платон, – лошадиный праздник. И скота жалеть надо, – сказал Каратаев. – Вишь, шельма, свернулась. Угрелась, сукина дочь, – сказал он, ощупав собаку у своих ног, и, повернувшись опять, тотчас же заснул.
Наружи слышались где то вдалеке плач и крики, и сквозь щели балагана виднелся огонь; но в балагане было тихо и темно. Пьер долго не спал и с открытыми глазами лежал в темноте на своем месте, прислушиваясь к мерному храпенью Платона, лежавшего подле него, и чувствовал, что прежде разрушенный мир теперь с новой красотой, на каких то новых и незыблемых основах, воздвигался в его душе.