Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Брошюра по системам счисления.docx
Скачиваний:
34
Добавлен:
12.11.2019
Размер:
1.63 Mб
Скачать

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

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

человека. Числа люди привыкли изображать в десятичной системе счисления. Длякомпьютера удобнее двоичная система. Это объясняется тем, что технически гораздопроще реализовать устройства (например, запоминающий элемент) с двумя, а не сдесятью устойчивыми состояниями (есть электрический ток — нет тока, намагничен —не намагничен и т.п.). Можно считать, что одно из двух состояний означает единицу,другое — ноль.

Любые данные (числа, символы, графические и звуковые образы) в компьютере представляются в виде последовательностей из нулей и единиц. Эти последовательности можно считать словами в алфавите {0,1}, так что обработку данных внутри компьютера можно воспринимать как преобразование слов из нулей и единиц по правилам, зафиксированным в микросхемах процессора. Такой взгляд роднит вычислительные машины с абстрактными вычислителями. Вспомните машины Тьюринга или нормальные алгоритмы Маркова. Элемент последовательности из нулей и единиц (член такой последовательности) называют битом. Именительный падеж — бит.

Отображение внешней информации во внутреннее представление называется

кодированием. Кодом ( франц. code, от лат. codex — свод законов) называют как сам способ отображения, так и множество слов (кодовых комбинаций), используемых при кодировании.

Числа в памяти компьютера

Существуют два способа представления чисел в памяти ЭВМ. Они называются так: форма с фиксированной точкой и форма с плавающей точкой. Форма с фиксированной точкой применяется к целым числам, форма с плавающей точкой — к вещественным числам (целым и дробным). Под точкой здесь подразумевается знак-разделитель целой и дробной части числа.

Целые отрицательные числа.

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

Дополнительным кодом двоичного числа X в N-разрядной ячейке является число, дополняющее его до значения 2.

Получить дополнительный код можно следующим путем:

  1. записать внутреннее представление положительного числа X;

  2. записать обратный код этого числа заменой во всех разрядах 0 на 1 и 1 на 0;

  3. к полученному числу прибавить 1.

Определим по этим правилам внутреннее представление числа -562810 в 32-разрядной ячейке.

1

00000000

00000000

00010101

1111110

2

11111111

11111111

11101010

00000011

3

11111111

11111111

11101010

00000100

Шестнадцатеричная форма результата: FF FF ЕА 04.

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

Почему отрицательные числа представляются в дополнительном коде? Дело в том, что в этом случае операция вычитания двух чисел сводится к сложению с дополнительным кодом вычитаемого, и процессору достаточно уметь лишь складывать числа. В самом деле: А - В = А + (-В).

Если значение (-В) будет иметь форму дополнительного кода, то в памяти ЭВМ получится правильный результат.

Проверим, действительно ли в ячейке памяти получится О в результате сложения числа 5628 с числом -5628 в форме дополнительного кода.

00000000 00000000 00010101 11111100 + 11111111 11111111 11101010 000000100 = 1 00000000 00000000 00000000 00000000

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

Двоичное 32-разрядное число 231 является «отрицательным самому себе». Получим его дополнительный код:

Определим по этим правилам внутреннее представление числа -562810 в 32-разрядной ячейке.

1

10000000

00000000

00000000

00000000

2

01111111

11111111

11111111

11111111

3

10000000

00000000

00000000

00000000

Полученный код используется для представления значения -231 = -2147483648.

Следовательно, диапазон представления целых чисел в 32-разрядном машинном слове: -231 <= Х <= 231-1, или -2147483648 <= Х <= 2147483647.

В общем случае для N-разрядного машинного слова этот диапазон такой:

-2N-1 <= X <= 2N-1-1.

В современных компьютерах часто используется 16- разрядное представление целых чисел. В этом случае их диапазон следующий:

-215 <= Х <= 215-1, или -32768 <= Х <= 32767.

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

Вещественные числа. Числовые величины, которые могут принимать любые значения (целые и дробные) называются вещественными числами. В математике также используется термин «действительные числа». Решение большинства математических задач сводится к вычислениям с веществен-ными числами. Как же такие числа представляются в памяти компьютера?

Вещественные числа в памяти компьютера представляются в форме с плавающей точкой.

Форма с плавающей точкой использует представление вещественного числа R в виде произведения мантиссы m на основание системы счисления р в некоторой целой степени n, которую называют порядком: R = m * рn

Например, число 25,324 можно записать в таком виде: 0.25324х102. Здесь m=0.25324 — мантисса, n=2 — порядок. Порядок указывает, на какое количество позиций и в каком направлении должна «переплыть», т.е. сместиться десятичная точка в мантиссе. Отсюда название «плавающая точка».

Однако справедливы и следующие равенства: 25,324 = 2,5324*101 = 0,0025324*104 = 2532,4*102 и т.п.

Получается, что представление числа в форме с плавающей точкой неоднозначно? Чтобы не было неоднозначности, в ЭВМ используют нормализованное представление числа в форме с плавающей точкой. Мантисса в нормализован-ном представлении должна удовлетворять условию: 0,1p <= m < 1p.

Иначе говоря, мантисса меньше единицы и первая значащая цифра — не ноль. Значит для рассмотренного числа нормализованным представлением будет: 0.25324 * 102. В разных типах ЭВМ применяются различные варианты представления чисел в форме с плавающей точкой. Для примера рассмотрим один из возможных. Пусть в памяти компьютера вещественное число представляется в форме с плавающей точкой в двоичной системе счисления (р=2) и занимает ячейку размером 4 байта. В ячейке должна содержаться следующая информация о числе: знак числа, порядок и значащие цифры мантиссы. Вот как эта информация располагается в ячейке:

± машинный порядок

М А

Н Т И С

С А

1-й байт 2-й байт 3-й байт 4-й байт

В старшем бите 1-го байта хранится знак числа. В этом разряде 0 обозначает плюс, 1 — минус. Оставшиеся 7 бит первого байта содержат машинный порядок. В следующих трех байтах хранятся значащие цифры мантиссы.

Что такое машинный порядок? В семи двоичных разрядах помещаются двоичные числа в диапазоне от 0000000 до 1111111. В десятичной системе это соответствует диапазону от 0 до 127. Всего 128 значений. Знак порядка в ячейке не хранится. Но порядок, очевидно, может быть как положительным так и отрицательным. Разумно эти 128 значений разделить поровну между положительными и отрицательными значениями порядка. В таком случае между машинным порядком и истинным (назовем его математическим) устанавливается следующее соответствие:

Машинный порядок

0

1

2

3

...

64

65

...

125

126

127

Математический порядок

-64

-63

-62

-61

...

0

1

...

61

62

63

Если обозначить машинный порядок Мр, а математический — р, то связь между ними ыразится такой формулой: Мр = р + 64 .

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

Полученная формула записана в десятичной системе. Поскольку 6410=4016 (проверьте!), то в шестнадцатеричной системе формула примет вид: Мр16 = р16 + 4016

И, наконец, в двоичной системе: Мр2 = р2+100 00002

Теперь мы можем записать внутреннее представление числа 25,324 в форме с плавающей точкой.

1. Переведем его в двоичную систему счисления с 24 значащими цифрами.

25,32410= 11001,01010010111100011012

2. Запишем в форме нормализованного двоичного числа с плавающей точкой:

0,110010101001011110001101*10101

Здесь мантисса, основание системы счисления (210=102) и порядок (510=1012)записаны в двоичной системе.

3. Вычислим машинный порядок.

Мр2 = 101 + 100 0000 = 100 0101

4. Запишем представление числа в ячейке памяти.

01000101

11001010

10010111

10001101

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

45

CA

97

8D

Для того, чтобы получить внутреннее представление отрицательного числа -25,324,достаточно в полученном выше коде заменить в разряде знака числа 0 на 1.

Получим:

11000101

11001010

10010111

10001101

А в шестнадцатеричной форме:

C5

CA

97

8D

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

Рассмотрим, наконец, вопрос о диапазоне чисел, представимых в форме с плавающей точкой. Очевидно, положительные и отрицательные числа расположены симметрично относительно нуля. Следовательно, максимальное и минимальное числа равны между собой по модулю: Rmax = |Rmin|. Наименьшее по абсолютной величине число равно нулю. Чему же равно Rmax? Это число с самой большой мантиссой и самым большим порядком: 0,111111111111111111111111*1021111111

Если перевести в десятичную систему, то получится Rmax = (1 - 2-24) * 264 = 1019

Очевидно, что диапазон вещественных чисел значительно шире диапазона целых чисел. Если в результате вычислений получается число по модулю большее, чем Rmax, то происходит прерывание работы процессора. Такая ситуация называется переполнением при вычислениях с плавающей точкой. Наименьшее по модулю ненулевое значение равно: (1/2) * 2-64=2-66.

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

Как известно из математики, множество действительных чисел бесконечно и непрерывно. Множество же вещественных чисел, представимых в памяти ЭВМ в форме с плавающей точкой, является ограниченным и дискретным. Каждое следующее значение получается прибавлением к мантиссе предыдущего единицы в последнем (24-м) разряде. Количество вещественных чисел, точно представимых в памяти машины, вычисляется по формуле: N = 2t * ( U - L+ 1) + 1.

Здесь t — количество двоичных разрядов мантиссы; U — максимальное значение математического порядка; L — минимальное значение порядка. Для рассмотренного нами варианта (t = 24, U = 63, L = -64) получается: N = 2 146 683 548.

Все же остальные числа, не попадающие в это множество, но находящиеся в диапазоне допустимых значений, представляются в памяти приближенно (мантисса обрезается на 24-м разряде). А поскольку числа имеют погрешности, то и результаты вычислений с этими числами также будут содержать погрешность. Из сказанного следует вывод: вычисления с вещественными числами в компьютере выполняются приближенно.

Презентация: http://www.slideshare.net/Moravskiy/ss-9083291

Источники информации

http://7sch.ucoz.ru/index/puteshestvie_v_istoriju_chisel_sistemy_schislenija/0-147

http://uchebnik1.narod.ru/chislo.html

http://www.slideshare.net/Moravskiy/ss-9083291