Главная Программы Учебное пособие Презентации Дополнительно
    Глава 1
  Глава 2
  Глава 3
  Глава 4
  Глава 5
  Глава 6
  Глава 7
  Глава 8
  Глава 9
  Глава 10
  Глава 11
  Глава 12
  Глава 13
  Глава 14
  Глава 15
  Глава 16
  Глава 17
  Глава 18
  Глава 19
  Глава 20
  Лабораторная 1
  Лабораторная 2
  Лабораторная 3
  Лабораторная 4
  Лабораторная 5
  Лабораторная 6
  Литература

Учебное пособие -> Глава 5

 

          Глава 5. Представление чисел в ЭВМ  

 

Существую различные способы представления чисел в ЭВМ в зависимости от того, какие числа:

-       целые положительные числа (без знака).

-       целые со знаком.

-       вещественные нормализованные числа.

 

Целые числа без знака

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

-       в однобайтовом формате значения от 000000002 до 111111112,

-       в двубайтовом формате — от 00000000000000002 до 11111111111111112.

 

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

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

Диапазон

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

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

1

0 ... 28–1

0 ... 255

2

0 ... 216–1

0 ... 65535

 

Целые числа со знаком обычно занимают в памяти компьютера один, два или четыре байта, при этом самый левый (старший) разряд содержит информацию о знаке числа. Знак “плюс” кодируется нулем, а “минус” – единицей.

 

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

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

Диапазон

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

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

1

-27 ... 27­

-128 ... 127

2

-215 ... 215–1

-32768 ... 32767

4

-231…231-1

-2147483648 ... 2147483647

 

Пример

7210 в однобайтовом формате

7

6

5

4

3

2

1

0

0

1

0

0

1

0

0

0

 

7210 в двубайтовом формате

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

0

0

0

0

0

0

0

0

0

1

0

0

1

0

0

0

 

число 6553510 в двубайтовом формате

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

 

Целые числа со знаком

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

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

 

Прямой код. В знаковый разряд помещается цифра знака, а в разряды цифровой части числа – двоичный код его абсолютной величины.

 

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

7

6

5

4

3

2

1

0

0

0

0

0

0

0

0

1

 

Прямой код числа: -127

7

6

5

4

3

2

1

0

1

1

1

1

1

1

1

1

 

,

где n-разрядность кода, aзн – значение знакового разряда.

Пример: если разрядность кода равна 4, то

1101=(-1)1[1x20+0x21+1x22]=-5

 

Обратный код. Получается инвертированием всех цифр двоичного кода абсолютной величины числа, включая разряд знака: нули заменяются единицами, а единицы – нулями.

Пример:

 число: -1, модуль 0 0000001, обратный код 1 1111110

 число: -127, модуль 0 1111111 , обратный код 1 0000000

,

где n-разрядность машинного слова, aзн=0 для положительных чисел, aзн=1 для отрицательных чисел.

1010 = 1*(-23+1)+[0x20+1x21+0x22] = -7+2=-5

 

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

число: -1 = обратный код 1 1111110

число: -127 =  обратный код 1 0000000

 

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

7

6

5

4

3

2

1

0

1

1

1

1

1

1

1

1

 

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

7

6

5

4

3

2

1

0

1

0

0

0

0

0

0

1

 

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

 

Алгоритм перевода отрицательных чисел в положительные

I вариант.

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

 610=01102

 

-610=10102

II вариант.

Дополнительный код=логическое дополнение (все биты инвертированы)+1

-610=10012+1

=10102

Число + его дополнительный код =0.

 

Представление в двоичном дополнительном коде в случае 3-битного кодирования чисел.

Набор битов

Значение

011

3

010

2

001

1

000

0

111

-1

110

-2

101

-3

100

-4

 

Для дополнительного кода справедливо следующее соотношение:

,

где n-разрядность машинного слова, aзн=0 для положительных чисел, aзн =1 для отрицательных чисел.

Пример:

1101 = 1*(-23)+[1x20+1x21+0x22]=-8+3=-5

Операции над целыми числами:

1.     Сложение.

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

3.     Умножение.

4.     Целочисленное деление и нахождение остатка от деления.

 

Выполнение арифметических действий над целыми числами в ЭВМ

В большинстве компьютеров операция вычитания не используется. Вместо нее производится сложение обратных или дополнительных кодов уменьшаемого и вычитаемого. Это позволяет существенно упростить конструкцию АЛУ.

Сложение обратных кодов – здесь при сложении чисел А и В имеют место четыре случая.

А и В положительные. При суммировании складываются все разряды, включая разряд знака. Так как знаковые разряды положительных слагаемых равны нулю, разряд знака суммы тоже равен нулю. Например:

А положительное, B отрицательное и по абсолютной величине больше, чем А.

Получен правильный результат в обратном коде. При переводе в прямой код биты цифровой части результата инвертируются: 1 0000111 = -710.

А положительное, B отрицательное и по абсолютной величине меньше, чем А.

Компьютер исправляет полученный первоначально неправильный результат (6 вместо 7) переносом единицы из знакового разряда в младший разряд суммы.

А и B отрицательные.

 

Полученный первоначально неправильный результат (обратный код числа -1110 вместо обратного кода числа -1010) компьютер исправляет переносом единицы из знакового разряда в младший разряд суммы. При переводе результата в прямой код биты цифровой части числа инвертируются: 1 0001010 = -1010.

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

Сложение дополнительных кодов – здесь также имеют место четыре случая.

А и В положительные.

А положительное, B отрицательное и по абсолютной величине больше, чем А.

Получен правильный результат в дополнительном коде. При переводе в прямой код биты цифровой части результата инвертируются и к младшему разряду прибавляется единица: 1 0000110 + 1 = 1 0000111 = -710.

А положительное, B отрицательное и по абсолютной величине меньше, чем А.

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

А и B отрицательные.

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

Сравнение рассмотренных форм кодирования целых чисел со знаком показывает:

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

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

 

Формат представления вещественных чисел

Вещественные числа в ЭВМ хранятся в нормализованном виде. При хранении числа с плавающей точкой отводятся разряды для мантиссы, порядка, знака числа и знака порядка:

1.     Чем больше разрядов отводится под запись мантиссы, тем выше точность представления числа.

2.     Чем больше разрядов занимает порядок, тем шире диапазон от наименьшего отличного от нуля числа до наибольшего числа, представимого в машине при заданном формате.

 

Рисунок 15 – Представление вещественных чисел

 

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

Число 6.2510 = 110.012 = +0,11001•2+11.

 

Рисунок 16 – Пример представления положительного вещественного числа

 

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

Число –0.12510 = –0.0012 = –0.1*2–10 (отрицательный порядок записывается в дополнительном коде).

 

Рисунок 17 – Пример представления  отрицательного вещественного числа

 

Характеристики форматов вещественных чисел

Форматы вещественных чисел

Размер в байтах

Примерный диапазон абсолютных значений

Количество значащих десятичных цифр

Одинарный

4

10–45 … 1038

7 или 8

Вещественный

6

10–39 … 1038

11 или 12

Двойной

8

10–324 … 10308

15 или 16

Расширенный

10

10–4932 … 104932

19 или 20

Форма представления чисел с плавающей точкой позволяет записывать числа с высокой точностью и из весьма широкого диапазона.

 

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

1.     Сложение.

1.     Δk=|k1-k2|.

2.     если k1>k2, то  k=k1, M=M1 + M2·10-Δk, иначе M=M2 + M1·10-Δk, k=k2.

3.     если 10-1<=M<1, то вывод результата в виде M×10k, иначе предварительная нормализация

Пример.

X1=0.87654*101, X2=0.94567*102. Пусть под запись мантиссы отводится 5 разрядов.

1.     Δk=1, k1<k2 следовательно k1=k2=2 (уравняли порядки).

2.     мантиссу числа X1 сдвигаем на один разряд влево (пропадет 4).

3.     новая мантисса равна 0,94567+0,08765=1,03332

4.     мантисса вышла за допустимый интервал  >1.

5.     нормализуя, получим мантиссу 0,10333 (теряем 2) и порядок увеличиваем на 1.

Ответ: X=0,10333*103 = 103,3324.

2.     Вычитание сводится к сложению с дополнительным кодом.

3.     Умножение производится по правилу – мантиссы перемножаются, а порядки складываются. Если нужно, то полученное число нормализуется.

Пример: (0.11101 * 2101) * (0.1001 * 211) = (0.11101 * 0.1001) . 2(101+11) = 0.100000101 . 21000.

3.     Деление производится по правилу – мантиссы делятся (делимое на делитель), а порядки вычитаются (порядок делителя из порядка делимого). Если нужно, то полученное число нормализуется

Пример: 0.1111 * 2100 : 0.101 * 211 = (0.1111 : 0.101) * 2(100-11) = 1.1 * 21 = 0.11 * 210.