Опубликован: 28.04.2014 | Доступ: свободный | Студентов: 832 / 65 | Длительность: 04:40:00
Специальности: Программист
Лекция 4:

Системы счисления

< Лекция 1 || Лекция 4
Аннотация: На этом уроке обсуждаются системы записи чисел, называемые системами счисления. Рассматриваются системы счисления, используемые в давние времена, - палочная система и римская система записи чисел. Показано, как изобретение цифры 0 позволило перейти к современным позиционным системам счисления. Если в обыденной жизни используется десятичная система счисления, то в мире компьютеров используется двоичная система, в которой существуют только две цифры 0 и 1. Подробности о двоичной системе и других позиционных системах и о том, как числа представляются в памяти компьютера, приведены в курсе "Информация и данные", предназначенном для самостоятельного изучения. Курс находится на сайте Интернет университета ИТ- "intuit.ru".

Смотреть лекцию на: ИНТУИТ | youtube.com

Если проблемы с видео, нажмите выше ссылку youtube

Get Adobe Flash Player

Системой счисления называется система записи чисел. Далеко не сразу сложилась современная система записи чисел, называемая десятичной позиционной системой счисления. Появление компьютеров потребовало применения для записи чисел в памяти компьютера двоичной системы счисления, более удобной для проведения вычислений появилась относительно появилась относительно недавно. По-видимому, первой системой счисления была так называемая "палочная" система, приспособленная для записи небольших натуральных чисел. Никаких дробных чисел тогда не знали, даже отрицательные целые числа появились достаточно поздно. Можно считать, что в палочной системе существует всего одна цифра – цифра 1, изображаемая в виде палочек. Натуральное число N записывалось N подряд идущими палочками. Понятно, что только небольшие числа удобно записать последовательностью палочек. Но эта система живет до сих пор и применяется особенно тогда, когда нужно многократно прибавлять к числу единицу, для этого достаточно дописывать к числу еще одну палочку. В десятичной системе в этом случае пришлось бы каждый раз стирать предыдущее число и записывать новое число.

Римляне уже в новой эре (две тысячи лет тому назад) пользовались так называемой Римской системой счисления. В этой системе существовала уже не одна цифра, что позволяло сделать запись числа более короткой в сравнении с палочной системой записи. Римляне ввели цифры: I (палочка) для записи числа 1, цифру V - для записи числа 5, цифру X - для записи числа 10, цифру L - для записи числа 50, цифру C - для записи числа 100, цифру D - для записи числа 500, цифру M - для записи числа 1000. В римской системе каждая цифра обозначает одно и то же число, независимо от позиции, в которой записана цифра. Максимальное число, которое можно записать в римской системе счисления, – это число MMMDCCCLXXXVIII – 3888. Правила записи довольно простые, - цифры M, C, X, I можно записывать подряд от одной до трех. Цифры D, L, V могут появляться в записи только один раз после старшей цифры. Цифры С, X, I могут появляться слева от старшей цифры, означая вычитание младшей цифры от старшей. Число 1946 в римской системе выглядит так: MCMXLVI.

Существенным прогрессом в записи чисел явилось изобретение позиционной системы счисления, где число, представленное цифрой, зависит как от цифры, так и от позиции, в которой стоит цифра. В записи числа 999, записанного в привычной для нас десятичной системе, младшая цифра - первая справа цифра 9 обозначает 9 единиц, вторая справа цифра 9 – девять десятков, третья цифра 9 – девять сотен. Великим изобретением, позволившим создать позиционную систему счисления, стало введение цифры 0. Изначально цифры вводились для обозначения некоторого количества предметов. Понять, что нужна цифра 0 для обозначения того, что предметов нет, было не просто.

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

Число цифр - p, используемых в позиционной системе счисления, называется основанием системы счисления, а сама система называется p-ичной. В двоичной системе счисления с основанием p = 2 всего 2 цифры – {0, 1}. В троичной системе к ним добавляется цифра 2. В четверичной – цифра 3. В привычной для нас десятичной системе используется 10 цифр {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}.

В шестнадцатеричной системе к привычным цифрам добавляются следующие цифры: A – для обозначения числа 10, B – 11, C – 12, D – 13, E – 14, F – 15.

В данном уроке мы лишь кратко рассмотрим некоторые вопросы, связанные с представлением чисел в разных системах счисления. Подробное рассмотрение этой важной темы оставляется для самостоятельного изучения. Рекомендуется пройти мой курс "Информация и данные", расположенный на сайте Интернет университета ИТ (intuit.ru) – одном из лучших информационных ресурсов для обучения информационных технологий.

Первый урок этого курса называется "Правда ли что 2 * 2 = 4?". В этом уроке объясняется, что это утверждение, являющееся образцом тривиально истинного утверждения, на самом деле не всегда истинно. Оно истинно в некоторых системах счисления, но не во всех. В двоичной системе счисления нет цифры 2, в троичной и четверичной нет цифры 4, так что в этих системах счисления сама запись "2 * 2 = 4" некорректна.

Как же выглядит число 2 в двоичной системе, где нет цифры 2? Заметим, что 2 = 1 + 1. Цифра 1 – это старшая цифра в двоичной системе счисления. По правилам сложения в любых позиционных системах счисления, когда к старшей цифре прибавляется единица, то в этом разряде записывается 0, а 1 переносится в следующий разряд. Поэтому в двоичной системе справедлива следующая запись:

12 +12 = 102 = 210

Нижние индексы указывают систему счисления, в которой записано соответствующее число. Утверждение "дважды два равно 4" в двоичной системе выглядит так:

102 * 102 = 1002

В троичной и четверичной системе цифра 2 присутствует, но цифры 4 нет. Поэтому утверждение выглядит так:

23 * 23 = 113;	24 * 24 = 104

Обобщая приведенные примеры, нетрудно понять, что справедливо следующее утверждение: в любой позиционной системе счисления число 10 равно основанию системы счисления. В двоичной системе 10 задает число 2, в троичной – 3, в шестнадцатеричной – 16.

Рассмотрим на примере, каково десятичное значение числа N, например, числа 111, записанного в разных системах счисления. В привычной для нас десятичной системе

111 = 1 * 100 + 1 * 101 + 1 * 102

В двоичной системе представление числа такое же, только 10p теперь равно 2 - основанию системы, так что:

1112 = 1 * 20 + 1 * 21 + 1 * 22 = 7

В шестнадцатеричной системе 10p равно 16, так что;

11116 = 1 * 160 + 1 * 161 + 1 * 162 = 27310

Основное соотношение

Пусть pоснование системы счисления, D = {d0, d1, ... dp-1} – цифры системы счисления. Целое число N в этой системе счисления записано в виде последовательности цифр: cmcm-1...c0

Эта запись корректна, если для любого i : [0, m] ci принадлежат D, то есть запись содержит цифры системы p.

Эта запись означает, что

N = cm * pm + cm-1 * pm-1 + cm-2 * pm-2 + ... c1 * p1 + c0 (*)

Следствие

N = K * p + c0 (**)

Здесь Kцелое число, полученное отбрасыванием последней цифры числа N.

K = cmcm-1...c1 = cm * pm-1 + cm-1 * pm-2 + cm-2 * pm-3 + ... + c2 * p1 + c1

Алгоритм перевода в десятичную систему

Если дана запись числа в системе с основанием p, то соотношение * позволяет вычислить десятичное значение числа N.

Выше приведенный пример записи числа 111 в разных системах счисления демонстрирует применение алгоритма перевода.

Алгоритм перевода десятичного числа в систему с другим основанием

Над десятичными целыми числами определены две операцииделение нацело и остаток от деления нацело. В языке C# эти операции обозначаются знаками / и %.

Учитывая соотношение (**), операции взятия остатка от деления нацело числа N на основание системы счисления p позволяет получить последнюю цифру c0 в записи числа N в системе с основанием p. Операция деления нацело позволяет отрезать последнюю уже найденную цифру. Повторяя этот процесс можно получить все цифры в записи числа N в системе с основанием p. Запись этого алгоритма может выглядеть так:

String Np = ""; //Строка, представляющая запись числа N в системе с основанием p
ПОКА( N != 0)
{
	Получить очередную цифру в записи числа N в системе с основанием p:
		Digit = N % p;
	Отрезать цифру:
		N = N / p;
	Присоединить цифру Digit к строке Np:
		Np = Digit + Np;
}

Приведем пример. Переведем десятичное число 111 в шестнадцатеричную систему.

Np – пустая строка;	 N = 111 (не равно 0) 
Digit = 111 % 16 = 15 (цифра F в шестнадцатеричной системе
N = N / 16 = 6; 
Np = F;
N = 6 (не равно 0)
Digit = 6 % 16 = 6 (цифра 6 в шестнадцатеричной системе)
N = 6 / 16 = 0; 
Np = 6F;
N = 0

Процесс перевода закончен. 11110 = 6F16

Не расписывая подробно приведем результат перевода числа 111 в двоичную систему:

11110 =11011112

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

Поговорим вначале об единицах измерения памяти. Минимальной единицей является память размера в один бит. Один бит может хранить одну цифру двоичной системы – 0 либо 1. Байт - это память, содержащая 8 бит. В одном байте может храниться двоичное слово, содержащее 8 двоичных цифр. Число различных двоичных слов, хранимых в одном байте, равно 28 = 256 от 00000000 до 11111111.

Память большого размера может измеряться в таких единицах, как килобайт (Кб), мегабайт (Мб), гигабайт (Гб), терабайт (Тб).

В программировании, где основной системой счисления является двоичная система, роль тысячи - числа 103 играет близкое к тысяче число 210 = 1024, задаваемое степенью основания двоичной системы.

1 Кб = 210 байта; 1 Мб = 210 Кб = 220 байта; 1 Гб = 210 Мб = 230 байта; 1 Тб = 210 Гб = 240 байта;

Мы видели, что в одном байте может храниться 28 = 256 различных двоичных слов. Справедливо общее утверждение – в памяти размера N бит можно хранить 2N двоичных слов. Поскольку двоичное слово можно рассматривать как запись целого числа в двоичной системе счисления, то не возникает никаких проблем для хранения в памяти целых чисел. Для хранения в памяти компьютера целого числа типа int отводится память размера 4 байта = 32 бита. Поскольку целые числа могут быть как положительными, так и отрицательными, то первый бит отводится для хранения знака числа (0 – число положительное, 1 – отрицательное), а следующие 31 бит хранят значение числа. Такая память позволяет хранить числа из интервала [-231 - +231-1].

А как хранятся в памяти компьютера числа типа double, имеющие целую и дробную часть? Ранее говорилось, что такие числа можно представить в виде: 0,q *10p, где qмантисса числа, а p – десятичный порядок. Мантисса и порядок – это целые числа, поэтому никаких проблем не возникает с их хранением. Для хранения числа типа double отводится память в 8 байтов = 64 бита. В этой памяти 55 бит отводится для хранения мантиссы числа, а 9 бит для хранения порядка числа.

Более подробно с деталями и примерами эта тема рассмотрена в уже упомянутом курсе "Информация и данные", предназначенном для самостоятельного изучения. В этом курсе показано также, как хранятся в памяти компьютера тексты и данные, представляющие разные виды информации, - графику, аудио и видео.

< Лекция 1 || Лекция 4
Дмитрий Лубченков
Дмитрий Лубченков
Николай Молдован
Николай Молдован
Светлана Грисман
Светлана Грисман
Россия, г. Новокузнецк
Ленар Муклуков
Ленар Муклуков
Россия, г. Казань