Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Tekhnologia_programmirovania.pdf
Скачиваний:
182
Добавлен:
08.04.2015
Размер:
1.76 Mб
Скачать

156

Глава 13. Внутреннее представление чисел

13.1. Двоичная система счисления

Числа, символы, изображения, звуки кодируются в компьютерах в виде последовательностей битов, которые могут находиться в двух различных состояниях. Эти состояния удобно описывать двумя значениями 0 и 1 и считать цифрами, а последовательности этих цифр рассматривать как числа, представленные в двоичной системе счисления. Числа в двоичной системе счисления, так же, как и в десятичной, представляются последовательностью цифр (нулей и единиц), имеющих различный «вес», определяемый положением цифры в числе. В десятичной системе в качестве «веса» цифры используется степень 10, а в двоичной – степень 2. Вес или старшинство цифры возрастает справа налево. В этом же направлении нумеруются разряды, причем нумерация начинается с 0. В табл.45 показаны цифры двоичного числа 01001110 и веса его цифр.

Таблица 46. Веса двоичных цифр

Номер разряда

7

6

5

4

3

2

1

0

Цифра

0

1

0

0

1

1

1

0

Вес цифры

27=128 26=64 25=32 24=16 23=8 22=4 21=2 20=1

Для получения значения числа в десятичной системе следует умножить веса на значения цифр и сложить:

01001110 = 0×128 + 1×64 + 0×32 + 0×16 + 1×8 + 1×4 + 1×2 + 0×1 = 78.

Двоичные цифры числа получаются путем последовательного деления числа на 2 и нахождения остатков от деления, табл.47.

Таблица 48. Получение двоичных цифр

Частное 78/2 = 39 39/2 = 19

19/2 = 9

9/2 = 4

4/2 = 2

2/2 = 1

1 / 2 = 0

Остато

78%2 =

39%2 =

19%2 =

9%2 =

4%2 =

2%2 =

1%2 = 1

к

0

1

1

1

0

0

 

Цифра

0

1

1

1

0

0

1

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

Внутреннее представление чисел

157

13.2. Беззнаковые целые

Беззнаковые целые типы имеют неотрицательные значения. Рассмотрим в качестве примера внутреннее представление типа unsigned char, представление остальных беззнаковых типов (unsigned short, unsigned int, unsigned long) аналогично. Под данные типа unsigned char отводится 1 байт памяти, состоящий из 8 битов или разрядов. Эти разряды могут образовывать

28 = 256 различных комбинаций из нулей и единиц:

00000000, 00000001, …, 11111111.

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

0, 1, 2, …, 255. Наибольшее значение 255 равно:

28 – 1.

В общем случае, если n – количество двоичных разрядов, отводимых для беззнакового типа, то наибольшее значение этого типа равно:

2n – 1.

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

Рассмотрим сложение двух чисел 100 и 200 типа unsigned char. Найдем их двоичное представление в виде 8 двоичных цифр, рис.55, 56.

10010

= 011001002

12620-

 

 

Рис.55. Получение двоичного представления для числа 100

158 13

20010 = 110010002

2002

-

Рис.56. Получение двоичного представления для числа 200

Обратим внимание, что двоичное представление для 200 получается из двоичного представления для 100 путем сдвига всех его разрядов влево на 1 позицию.

Выполним сложение этих числе столбиком:

+ 0 1 1 0 0 1 0 0 1 1 0 0 1 0 0 0 1 0 0 1 0 1 1 0 0

Для старшей единицы не хватает разряда, поэтому она отбрасывается, в результате получаем:

10010 + 20010 = 001011002 = 32+8+4 = 4410. Найдем теперь разность 100 - 200:

0 1 1 0 0 1 0 0

1 1 0 0 1 0 0 0

1 0 0 1 1 1 0 0

Здесь выполняется заем из несуществующего девятого разряда, в результате получается:

10010 – 20010 = 100111002 = 128 + 16 + 8 + 4 = 15610.

13.3. Двоичный дополнительный код

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

00000000, 00000001,…, 01111111.

Внутреннее представление чисел

159

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

0, 1, 2, …, 127.

Для отрицательных чисел остаются комбинации: 10000000. 10000001, 10000010, …, 11111111,

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

Таблица 49. Двоичный дополнительный код

Битовая

Числово

Битовая

Числовое

комбинация

е

комбинация значение

 

значение

1000 0000

–128

 

 

0111 1111

127

1000 0001

–127

0111 1110

126

1000 0010

–126

0000 0111

7

1111 1001

-7

0000 0110

6

1111 1010

–6

0000 0101

5

1111 1011

–5

0000 0100

4

1111 1100

–4

0000 0011

3

1111 1101

–3

0000 0010

2

1111 1110

–2

0000 0001

1

1111 1111

–1

0000 0000

0

 

 

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

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

Можно сформулировать и другое правило: