Transcript Document
Системы счисления, представление чисел в компьютере
Часть 1 Системы счисления
Эволюция систем счисления
• Вавилонская – 60-ричная (осталась для обозначения времени и углов) • Греческая – непозиционная, • Римская – непозиционная, I II III IV V VI VII VIII IX X XI L C M • Двенадцатеричная – дюжина, гросс, масса; 1 фут=12 дюймов, 1 шиллинг = 12 пенсов • • Прочие – 2 (Австралия, Полинезия), 5 (Африка), 20 (Кельты, Майя, Ацтеки)
Индийская, арабская
десятичная – позиционная,
Какие бывают системы счисления?
• Непозиционные • Позиционные Значение цифры зависит от ее положения в числе a k *p k + a k-1 *p k-1 + … + a 1 *p 1 + a 0 *p 0 • Однородные • Смешанные Более одного основания
Какие системы используются в ЭВМ?
Аппаратура • Двоичная Программное обеспечение • Двоичная • Восьмеричная • Шестнадцатеричная
10
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
2
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
8
0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17
16
0 1 2 3 4 5 6 7 8 9 A B C D E F
3
0 1 2 10 11 12 20 21 22 100 101 102 110 111 112 120
Двоичная система счисления
Если
x
a d m m
a m
1
d m
1
a d
1 1
a d
0 0
a d
1 1
a d n
n
0
m m
1 , ,
a
n
d
, 0
a m
, 0
a
n
, где то
x d
запись числа
x
в
d
ичной системе счисления содержит Целая часть содержит
m+1
цифр, дробная
n
.
m+n+1 x d
a a m m
1
a a a a
1 0 1 2
a
n
Пример
: 109 10 = 1 * 10 2 + 0 * 10 1101101 2 = 1 * 2 6 1 + 1 * 2 5 + 9 * 10 0 = 109 + 0 * 2 4 + 1 * 2 3 = 64 + 32 + 8 + 4 + 1 = 109 + 1 * 2 2 + 0 * 2 1 + 1 * 2 0 цифр.
= 3.15625
10 = 3 * 10 0 = 3.15625
+ 1 * 10 -1 + 5 * 10 11.00101
2 = 1 * 2 1 + 1 * 2 0 + 0 * 2 = 2 + 1 + 1/8 + 1/32 = 3.15625
-1 -2 + 6 * 10 + 0 * 2 -2 -3 + 2 * 10 + 1 * 2 -3 -4 + 0 * 2 + 5 * 10 -4 + 1 * 2 -5 -5 = =
Двоичная система счисления
перевод из двоичной системы счисления в десятичную 1.
представление числа в виде суммы степеней двоек 2.
вычисление суммы 1001.0101
2 = = 1*2 3 + 0*2 2 + 0*2 1 + 1*2 0 + + 0*2 -1 + 1*2 -2 + 0*2 -3 + 1*2 -4 = = 8 + 0 + 0 + 1 + 0 + 1/4 + 0 + 1/8 = 9.375
10
Двоичная система счисления
перевод из десятичной системы счисления в двоичную 134 10 134. 65625 10 Последовательно делим число на 2, сохраняем на каждой итерации остатки от деления на 2. Продолжаем пока число не равно 0.
1а
. Остаток от деления 134 на 2 равен 0, т.е. 134 % 2 =
0
1b
. 134 / 2 = 67
2а
. 67 % 2 =
1
2b
. 67 / 2 = 33 (целочисленное деление!)
3
. 33 % 2 =
1
, 33 / 2 = 16
4
. 16 % 2 =
0
, 16 / 2 = 8
5
. 8 % 2 =
0
, 8 / 2 = 4
6
. 4 % 2 =
0
, 4 / 2 = 2
7
. 2 % 2 =
0
, 2 / 2 = 1
8
. 1 % 2 =
1
, 1 / 2 = 0 Объединяем остатки в
обратном
порядке: 134 10 =
1 0 0 0 0 1 1 0
2 0.65625
10 Последовательно сравниваем число с 1/2, если число меньше 1/2, то запоминает 0 и удваиваем, иначе запоминает 1, отнимает 1/2 и удваиваем. Продолжаем, пока не получим 0.
1
. 0. 65625 >= 1/2, запоминаем
1
, 2*(0. 65625 - 1/2) = 0.3125
2
. 0.3125 < 1/2, запоминаем
0
, 2*0.3125 = 0.625
3
. 0.625 >= 1/2, запоминаем
1
, 2*(0.625
– 1/2) = 0.25
4
. 0.25 < 1/2, запоминаем
0
, 2*(0.25
– 1/2) = 0.5
5
. 0.5 >= 1/2, запоминаем
1
, 2*(0.5
– 1/2) = 0.0
Объединяем запомненные цифры в
прямом
порядке 0.65625
10 =
1 0 1 0 1
2 10000110.10101
2
Двоичная система счисления
перевод из десятичной системы счисления в двоичную Десятичная дробь 0.2 в двоичном представлении бесконечна и периодична.
1.
0.2 < 1/2 , запоминаем 0 2*0.2 = 0.4
2.
0.4 < 1/2 , запоминаем 0 2*0.4 = 0.8
3.
0.8 >= 1/2 , запоминаем 1 2*(0.8-1/2) = 0.6
4.
0.6 >= 1/2 , запоминаем 1 2*(0.6-1/2) = 0.2
… Таким образом, 0.2
10 = 0.001100110011… = 0.(0011) 2
Часть 2 Представление чисел в компьютере
Представление беззнаковых целых чисел
Для представления беззнакового (т.е. неотрицательного) целого числа его необходимо перевести в двоичное представление и записать полученную последовательность 0 и 1 (битов) в соответствующие ячейки памяти.
Например, 123 данных ( 10 = 1111011 Поэтому представление числа 123 с помощью однобайтового типа
unsigned char
в
C
2 ) будет следующим: 7 0 0 1 1 1 1 0 1 1 Однобайтовый тип данных позволяет представлять числа от 0 до 2 8 -1: 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 2 8 -1 = 255 1 1
Представление беззнаковых целых чисел
Тип данных Однобайтовый (unsigned char) Четырехбайтовый (unsigned int) Восьмибайтовый (unsigned long long) Минимальное представимое число 0 0 0 Максимальное представимое число 2 8 -1 2 32 -1 2 64 -1
Ошибочные ситуации при целочисленной арифметике • Переполнение, недополнение
– чтение и установка флага переноса в арифметических командах, – операции с насыщением, – произвольная точность
• Деление на нуль
– обработка исключительной ситуации
Представление знаковых целых чисел
Знаковые целые числа в памяти компьютера представляются с помощью
дополнительного кода
.
Вычисление дополнительного кода числа
x
: 1. Если
x
≥ 0, то дополнительный код
x
совпадает с его двоичным представлением 2. Если
x
< 0 , то для получение дополнительного кода необходимо: А. найди двоичное представление модуля
x
B. Изменить все биты в двоичном представлении
x
на в C): противоположные С. Прибавить единицу Например, представим число -84 в знаковом однобайтовом типе (тип char А. |-84 10 | = 84 10 = 2 6 + 2 4 + 2 2 = 01010100 2 B.
Инвертируем все биты: 01010100 2 → 10101011 2 С. Прибавляем единицу: 10101011 2 + 1 2 = 10101100 2 7 0 1 0 1 0 1 1 0 0
Представление знаковых целых чисел
Однобайтовый знаковый тип данных (char) позволяет представлять числа от -2 7 до 2 7 1 (от -128 до 127).
2 7 -1 0 1 1 1 1 1 1 1 2 7 -2 1 0 0 1 0 1 0 1 … 0 1 0 1 0 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 1 1 1 1 1 1 1 1 -2 -127 1 1 1 0 1 0 1 … 0 1 0 1 0 1 0 0 1 -128 1 0 0 0 0 0 0 0
Представление знаковых целых чисел
Тип данных Минимальное представимое число Максимальное представимое число Однобайтовый (char) Четырехбайтовый (int) Восьмибайтовый (long long) -2 7 -2 31 -2 63 2 7 -1 2 31 -1 2 63 -1
Представление вещественных чисел
По стандарту IEEE 754 вещественное число
А
представляется в виде:
A S
M
2
E
, 1
M
2 S – однобитовый знак числа, S=0 для положительных чисел, S=1 для отрицательных; M – нормализованная мантисса E – показатель степени двойки Тип float (32 бит) double (64 бит) Количество битов в мантиссе 23 Количество битов в экспоненте 8 52 11
Представление вещественных чисел
Пример представления числа (0.15625) 10 =(0.00101) 2 Необходимо представить число в виде произведения в типе float.
A
S
M
2
E
где 1
M
2 .
0.15625 = 1.25 · 2 -3 , таким образом, S = 0, M = 1.25
10 , E = -3 10 .
1. 0.15625 > Поэтому 0, поэтому
sign
=
0
.
2. Вычислим двоичное представление мантиссы M = 1.25
10 = 1.01
2 . В силу условия нормализованности мантиссы (1 ≤ M < 2) мантисса всегда начинается в единицы, что позволяет записывать только дробную ее часть.
fraction
=
01 2
.
3. Показатель степени вычисляется следующим образом:
exponent
= E + (2 Таким образом, q-1 – 1) 10 , где q – количество битов, выделяемых под порядок (в случае float q=8).
exponent
= -3 10 + (2 8-1 – 1) 10 = -3 10 + 127 10 = 124 10 =
1111100 2
В результате, число 0.15625 представимо в следующем виде: sign exponent (8 битов) fraction (23 бита) 0 0 1 1 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 23 0
Представление вещественных чисел
Для стандартных типов данных имеет место следующие значения: Тип float Минимальный десятичный порядок -45* Максимальный десятичный порядок 38 Число значащих десятичных знаков 7 double -323 308 15 * Стоит отметить, что мантисса может быть ненормализованной, что и приводит к таким значениям минимального порядка.
Под мантиссу в
float
отводится 23 бита + 1 неявный, т.о., получается 24 значащих двоичных знака или 7 десятичных знаков в силу того, что 2 24 ≈ 10 7 .
Максимальный двоичный порядок 2 7 1, поэтому максимальный десятичный порядок равен 38, т.к. 2^(2 7 -1) ≈ 10 38 .