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.

. Остаток от деления 134 на 2 равен 0, т.е. 134 % 2 =

0

1b

. 134 / 2 = 67

. 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 .