Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
действия с кодами двоич чисел.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
94.12 Кб
Скачать

КОДИРОВАНИЕ ЧИСЕЛ

Формы и форматы представления данных в компьютере.

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

В компьютерах, как и в математике, используется как естественная, так и нормальная формы записи чисел. Каждая из форм имеет определенные форматы для каждого типа компьютеров, составленные из целого количества байт. Длину формата данных измеряют в машинных словах или в количестве двоичных разрядов (бит). Так, для ПК слово - 2 байта, двойное слово - 4 байта.

Машинное полуслово для ПК

старший разряд

6

5

4

3

2

1

младший разряд

Естественная форма.

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

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

Во всех форматах знак числа занимает место перед старшим разрядом и кодируется.

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

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

знак

214

213

212

211

210

29

28

27

26

25

24

23

22

21

20

0 - знак "плюс"

1 - знак "минус"

Знак от числа отделяется воображаемой точкой.

Оценим диапазон представления чисел в коротком формате - 2 байта.

|A|min = 1

|A|max = 215-1 = 32767

Нормальная форма.

Любое число в нормальной форме представляется в виде:

A =  mAq PA

mA - мантисса числа A

q - основание системы счисления

PA - порядок

Мантисса числа должна удовлетворять условию: 1/q <= |m|<=1.

55,25 - естественная форма

5525*10-2 - степенная форма

0,005525*10- степенная форма

0,5525*102 - нормальная форма

Как видно из записи числа, мантисса и порядок имеют знаки, поэтому в формате следует отвести два разряда под знаки, что уменьшит диапазон представления чисел. Поэтому в компьютерах не используют короткую форму записи чисел (2 байта), а пользуются представлением в 4 и 8-байтных форматах.

Обычно 7 разрядов используется под порядок и его знак. Числовая ось порядков находится в диапазоне -64<=P<=63. Для исключения отрицательных порядков используют смещение оси в область положительных значений, т.е. +64. Такой смещенный порядок называется характеристикой Px = P + 4016 (шестнадцатеричное представление предпочтительнее, т.к. упрощает действия над такими числами)

Таким образом Px=40 - это P = 0, а диапазон 0 <= Px  <=127=7F.

Пример записи числа в нормальной форме.

A = 7D08,816

B = -7D08,816

mA = 0,7D088 PxA = 40+4 = 44

mB = -0,7D088 PxB = 40+4 = 44

A = 0 100 0100 0111 1101 0000 1000 1000 0000 A = 44D0880 > 0

B = 1 100 0100 0111 1101 0000 1000 1000 0000 B = C4D0880 < 0

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

  1. Арифметическое сложение.

  2. Сдвиг кода числа вправо и влево.

Машинные коды целых чисел.

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

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

Правила образования машинных кодов.

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

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

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

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

Рассмотрим образование кодов в двоичной системе счисления чисел ±34.

А = 3410 = 1000102

В = -3410 = -1000102

Для простоты примем, что задана разрядная сетка в один байт (8 двоичных разрядов).

34

-34

ПК

00100010

10100010

ОК

11011101

ДК

11011110

Вспомним таблицу сложения для двоичных чисел:

+

0

1

0

0

1

1

1

10

Обратите внимание, что при сложении 1+1 образуется единица переноса в старший разряд. При сложении могут возникнуть и другие ситуации, например:

  • 1+1+1 - единица остается в текущем разряде и образуется единица переноса;

  • 1+1+1+1 - ноль в текущем, две единицы в переносе;

  • 1+1+1+1+1 - единица в текущем, две единицы в переносе;

  • 1+1+...+1 - (N-количество слагаемых) если N-четное, то в текущем разряде ноль, в переносе N/2 единиц, если N-нечетное, то единица в текущем, целая часть от N/2 единиц в переносе.

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

Рассмотрим это на примере с числом -34.

А = -3410 = - 1000102

Прямой код положительного числа - 00100010

Константа для дополнительного кода - 100000000

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

занимаемые единицы

1

1

1

1

1

1

10

-

1

0

0

0

0

0

0

0

0

0

0

1

0

0

0

1

0

1

1

0

1

1

1

1

0

Для обратного кода также существует константа перевода , в данном случае она равна 11111111. Проверьте правильность преобразования в обратный код числа 34. Очевидно, что для 2-х байтного числа константой перевода в дополнительный код будет число 100000000000000002 или 1000016. Часто при решении задач удобнее работать с шестнадцатеричным представлением чисел, а ответ уже переписывать в двоичной системе.

Действия с машинными кодами чисел.

Напомним, что машинные коды чисел призваны заменить отсутствующую в компьютере операцию вычитания (и деления тоже) на операцию сложения. Разберем примеры сложения машинных кодов различных чисел.

Действия над числами, представленных в естественной форме

(для компьютера - это целые числа)

При сложении кодов целых чисел нужно учитывать следующие положения.

  1. Числа хранятся в дополнительном коде.

  2. В сумматоре числа складываются вместе со знаками, при этом образуется знак результата.

  3. При сложении чисел с разными знаками единица переноса из знакового (старшего) разряда стирается.

Пример. Дано А=254, В=175. Найти сумму чисел при разных знаках слагаемых в 16-разрядном формате.

А = 25410 = FE16 = 111111102

В = 17510 = AF16 = 101011112

Машинные коды этих чисел с разными знаками представим в таблицах.

254

-254

ПК

0 000000011111110

1 000000011111110

ОК

1 111111100000001

ДК

1 111111100000010

175

-175

ПК

0 000000010101111

1 000000010101111

ОК

1 111111101010000

ДК

1 111111101010001

Выполним действия (во всех случаях выполняется сложение в дополнительном коде!).

С1 = А + В

А

 

0

0

0

0

0

0

0

0

1

1

1

1

1

1

1

0

В

 

0

0

0

0

0

0

0

0

1

0

1

0

1

1

1

1

С1

 

0

0

0

0

0

0

0

1

1

0

1

0

1

1

0

1

Проверка: С1 = 1101011012 = 28+27+25+23+22+20 = 256+128+32+8+4+1 = 42910

С2 = А - В = А + (-В)

А

 

0

0

0

0

0

0

0

0

1

1

1

1

1

1

1

0

 

1

1

1

1

1

1

1

1

0

1

0

1

0

0

0

1

С2

1

0

0

0

0

0

0

0

0

0

1

0

0

1

1

1

1

Перенос из знакового разряда исключаем.

Проверка: С2 = 10011112 = 26+23+22+21+20 = 64+8+4+2+1 = 7910

С3 = В - А = В + (-А)

В

 

0

0

0

0

0

0

0

0

1

0

1

0

1

1

1

1

 

1

1

1

1

1

1

1

1

0

0

0

0

0

0

1

0

С3

 

1

1

1

1

1

1

1

1

1

0

1

1

0

0

0

1

Число С3 отрицательное в дополнительном коде.

Проверка: получим прямой код числа С3.

ДК

1

1

1

1

1

1

1

1

1

0

1

1

0

0

0

1

ОК

1

1

1

1

1

1

1

1

1

0

1

1

0

0

0

0

ПК

1

0

0

0

0

0

0

0

0

1

0

0

1

1

1

1

С3 = -10011112 = -(26+23+22+21+20 )= -(64+8+4+2+1) = -7910

С4 = -А - В = (-А) + (-В)

 

1

1

1

1

1

1

1

1

0

0

0

0

0

0

1

0

 

1

1

1

1

1

1

1

1

0

1

0

1

0

0

0

1

С4

1

1

1

1

1

1

1

1

0

0

1

0

1

0

0

1

1

Перенос из знакового разряда исключаем.

Число С4 отрицательное в дополнительном коде.

Проверка: получим прямой код числа С4.

ДК

1

1

1

1

1

1

1

0

0

1

0

1

0

0

1

1

ОК

1

1

1

1

1

1

1

0

0

1

0

1

0

0

1

0

ПК

1

0

0

0

0

0

0

1

1

0

1

0

1

1

0

1

С4 = -1101011012 =-( 28+27+25+23+22+20 )=-( 256+128+32+8+4+1) =- 42910

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

При сложении чисел, представленных в нормальной форме, необходимо учитывать:

  1. Числа в нормальной форме хранятся в памяти в прямом коде с нормализованными мантиссами.

  2. Сложение кодов чисел производится путем сложения мантисс только при одинаковых порядках (характеристиках) слагаемых. За общий выбирается наибольший порядок. Выравнивание порядков слагаемых осуществляется изменением мантиссы меньшего числа.

  3. Результаты в прямом коде нормализуются.

Пример. Дано А = 15 7/8 ; B = 5/16. Найти сумму чисел при разных знаках слагаемых.

Вычисления с числами в нормальной форме удобнее выполнять в шестнадцатеричной системе счисления, разряды чисел 4 байта (32 двоичных разряда).

A = F,E16; B = 0,516

1. Нормализация мантисс и определение характеристик:

mA = 0,FE PxA = 40 + 1 = 41

mB = 0,5 PxB = 40 + 0 = 40

2. Выравнивание характеристик:

PxB = 41 => mB = 0,05

3. Дополнительные коды мантисс отрицательных чисел.

-mA = 1.00 - 0,FE = 0,02

-mB = 1.00 - 0,05 = 0,FB

4. Коды чисел:

а) в шестнадцатеричном представлении

A = 41FE0000

B = 41050000

-A = C1020000

-B = C1FB0000

б) в двоичном представлении

A = 0 1000001 1111 1110 0000 0000 0000 0000

B = 0 1000001 0000 0101 0000 0000 0000 0000

-A = 1 1000001 1111 1110 0000 0000 0000 0000

-B = 1 1000001 0000 0101 0000 0000 0000 0000

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

Важно: помните, что числа в нормальной форме представления хранятся в прямом коде!

4. Выполнение действий.

C1 = A + B

mA

F

E

0

0

0

0

mB

0

5

0

0

0

0

mC1

1

0

3

0

0

0

0

Так как слагаемые с одинаковым знаком, то перенос единицы из старшего разряды мантиссы означает нарушение нормализации мантиссы влево.

Нормализация мантиссы: mC1 = 0,103 PC1 = 41 + 1 = 42

Код числа C1 = 42103000 или 0 1000010 0001 0000 0011 0000 0000 0000

Проверка: С1 = 10,316 = 16 3/16 10

C2 = -B = - (A + B)

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

Код числа С2 = 1 1000010 0001 0000 0011 0000 0000 0000 или C2103000

С2 = -10,316 = -16 3/16 10

C3 = A - B

mA

F

E

0

0

0

0

-mB

F

B

0

0

0

0

mC3

1

F

9

0

0

0

0

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

Код числа С3 = 41F90000 или 0 1000001 1111 1001 0000 0000 0000 0000

С2 = F,916 = 15 9/19 10

C4 = B - A

-mA

0

2

0

0

0

0

0

mB

0

5

0

0

0

0

0

-mC4

0

7

0

0

0

0

0

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

mC4 = 1,00 - 0,07 = 0,F9 PmC4 = 41

Код числа С4 = C1F90000 или 1 1000001 1111 1001 0000 0000 0000 0000

C4 = -F,916 = -15 9/19 10

Вопросы для контроля.

  1. Что такое разрядная сетка или формат данных?

  2. Какие формы записи чисел существуют в информатике?

  3. Какие форматы представления чисел используются для различных форм записи?

  4. Что такое машинные коды чисел? Для каких целей они вводятся в информатике?

  5. Какова длина машинного слова для персональных компьютеров?

  6. Как в компьютере учитываются знаки чисел?

  7. Правила образования машинных кодов чисел?

  8. В каком виде хранятся в компьютере целые числа (формат и форма)?

  9. В каком виде хранятся в компьютере вещественны числа (формат и форма)?

  10. Что следует помнить при сложении кодов чисел, представленных в естественной форме записи?

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

Упражнение.

  1. Привести следующие десятичные числа к нормальной форме записи: а) 234,13; б)0,0005; в)1234590,00001; г)1,0002; д)100.

  2. Получить машинные коды для следующих десятичных чисел: а)123; б) -141; в)256,125; г)-321 3/8; д)89 15/16; е) 99; ж)2,5; з) 255 1/2

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

Целые числа являются простейшими числовыми данными, с которыми оперирует ЭВМ. Для целых чисел существуют два представления: беззнаковое (только для неотрицательных целых чисел) и со знаком. Очевидно, что отрицательные числа можно представлять только в знаковом виде. Целые числа в компьютере хранятся в формате с фиксированной запятой.

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

Для беззнакового представления все разряды ячейки отводятся под представление самого числа. Например, в байте (8 бит) можно представить беззнаковые числа от 0 до 255. Поэтому, если известно, что числовая величина является неотрицательной, то выгоднее рассматривать её как беззнаковую.

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

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

Прямой код числа.

Представление числа в привычной форме "знак"-"величина", при которой старший разряд ячейки отводится под знак, а остальные - под запись числа в двоичной системе, называется прямым кодом двоичного числа. Например, прямой код двоичных чисел 1001 и -1001 для 8-разрядной ячейки равен 00001001 и 10001001 соответственно. Положительные числа в ЭВМ всегда представляются с помощью прямого кода. Прямой код числа полностью совпадает с записью самого числа в ячейке машины. Прямой код отрицательного числа отличается от прямого кода соответствующего положительного числа лишь содержимым знакового разряда. Но отрицательные целые числа не представляются в ЭВМ с помощью прямого кода, для их представления используется так называемый дополнительный код.

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

Дополнительный код положительного числа равен прямому коду этого числа. Дополнительный код отрицательного числа m равен 2k-|m|, где k - количество разрядов в ячейке. Как уже было сказано, при представлении неотрицательных чисел в беззнаковом формате все разряды ячейки отводятся под само число. Например, запись числа 243=11110011 в одном байте при беззнаковом представлении будет выглядеть следующим образом:

1

1

1

1

0

0

1

1

При представлении целых чисел со знаком старший (левый) разряд отводится под знак числа, и под собственно число остаётся на один разряд меньше. Поэтому, если приведённое выше состояние ячейки рассматривать как запись целого числа со знаком, то для компьютера в этой ячейке записано число -13 (243+13=256=28). Но если это же отрицательное число записать в ячейку из 16-ти разрядов, то содержимое ячейки будет следующим:

1

1

1

1

1

1

1

1

1

1

1

1

0

0

1

1

Знаковый разряд Возникает вопрос: с какой целью отрицательные числа записываются в виде дополнительного кода и как получить дополнительный код отрицательного числа? Дополнительный код используется для упрощения выполнения арифметических операций. Если бы вычислительная машина работала с прямыми кодами положительных и отрицательных чисел, то при выполнении арифметических операций следовало бы выполнять ряд дополнительных действий. Например, при сложении нужно было бы проверять знаки обоих операндов и определять знак результата. Если знаки одинаковые, то вычисляется сумма операндов и ей присваивается тот же знак. Если знаки разные, то из большего по абсолютной величине числа вычитается меньшее и результату присваивается знак большего числа. То есть при таком представлении чисел (в виде только прямого кода) операция сложения реализуется через достаточно сложный алгоритм. Если же отрицательные числа представлять в виде дополнительного кода, то операция сложения, в том числе и разного знака, сводится к из поразрядному сложению. Для компьютерного представления целых чисел обычно используется один, два или четыре байта, то есть ячейка памяти будет состоять из восьми, шестнадцати или тридцати двух разрядов соответственно.