Системы счисления
Система счисления — символический метод записи чисел, представление чисел с помощью письменных знаков.
- Число — некоторая абстрактная сущность, мера для описания количества чего-либо.
- Цифры — знаки, используемые для записи чисел.
Цифры бывают разные: самыми распространёнными являются арабские цифры, представляемые знаками от нуля (0) до девяти (9); менее распространены римские цифры, их можно встретить на циферблате часов или в обозначении века (XIX век).
Поскольку чисел гораздо больше чем цифр, то для записи числа обычно используется набор (комбинация) цифр. Только для небольшого количества чисел — для самых малых по величине целых чисел — бывает достаточно одной цифры. Существует много способов записи чисел с помощью цифр, называемых системой счисления. Величина числа может зависеть от порядка цифр в записи, а может и не зависеть. Это свойство определяется системой счисления и служит основанием для простейшей классификации таких систем, что позволяет все системы счисления разделить на четыре класса (группы):
- позиционные;
- непозиционные;
- смешанные.
- унарные.
Позиционные системы счисления подробно рассмотрены ниже, после краткого обзора смешанных и непозиционных систем.
Денежные знаки — это пример смешанной системы счисления.
Сейчас в России используются монеты и купюры следующих номиналов: по 5, 10, 50 копеек и по 1, 2, 5, 10, 50, 100, 200, 500, 1000, 2000, 5000 рублей. Чтобы получить некоторую сумму в рублях, нужно использовать некоторое количество денежных знаков различного достоинства.
Предположим, что пылесос стоит 6379 рублей. Для покупки можно использовать шесть купюр по тысяче рублей, три купюры по сто рублей, одну пятидесятирублёвую купюру, две десятки, одну пятирублёвую монету и две монеты по два рубля. Если записать количество купюр или монет начиная с 1000 руб. и заканчивая пятью копейками, заменяя нулями неиспользуемые номиналы, то получится число 600312120000.
Если перемешать цифры в числе 600312120000, оно представит ложную цену пылесоса. Следовательно, такая запись относится к позиционным системам.
В непозиционных системах счисления величина числа не зависит от положения цифр в записи. Если к каждой цифре приписать знак номинала, то такие составные знаки (цифра + номинал) уже можно перемешивать, то есть такая запись является непозиционной.
Примером «рафинированной» непозиционной системы счисления является римская система.
Позиционные системы счисления
Введение
Позиционные системы счисления — это системы счисления, в которых значение цифры напрямую зависит от её положения в числе.
Например, число 01 обозначает единицу, 10 — десять.
Позиционные системы счисления позволяют легко производить арифметические расчёты.
Представление чисел с помощью арабских цифр — самая распространённая позиционная система счисления, она называется «десятичной системой счисления». Десятичной системой она называется потому, что использует десять цифр: 0, 1, 2, 3, 4, 5, 6, 7, 8 и 9. Заметьте: максимальная цифра (9) на единицу меньше количества цифр (10).
Для составления машинных кодов удобно использовать не десятичную, а двоичную систему счисления, содержащую только две цифры, 0 и 1. Обратите внимание, что в двоичной системе максимальная цифра 1.
Программисты для вычислений также пользуются ещё восьмеричной и шестнадцатеричной системами счисления.
Количество цифр, используемых в системе счисления, называется её «основанием». В десятичной системе основание равно десяти, в двоичной системе — двум, ну а в восьмеричной и шестнадцатеричной — соответственно, восьми и шестнадцати. То есть в ручной системе счисления количество цифр равно р и используются цифры от 0 до р-1.
В общем случае в позиционной системе счисления числа представляются следующим образом: , где — цифры, а — основание системы счисления. Если используется десятичная система, то — можно опустить.
Примеры чисел:
- — число в десятичной системе счисления, ;
- — это же число в восьмеричной системе счисления, ;
- — это же число в несимметричной троичной системе счисления, ;
- — это же число в двоичной системе счисления, ;
Зависимость плотности записи информации от основания системы счисления
Удельная натурально логарифмическая плотность записи числа зависит от основания системы счисления х и выражается функцией y=ln(x)/x. Эта функция имеет максимум при x=e=2,718281828….
То есть система счисления с наибольшей плотностью записи имеет не целочисленное основание.
Из целочисленных систем счисления наибольшей плотностью записи информации обладает троичная система счисления, то есть система с основанием равным трём.
Эту задачу решали ещё во времена Непера, в результате для уменьшения таблиц и числа вычислений перешли к таблицам натуральных логарифмов с основанием равным числу Эйлера е=2,718281828… .
Преобразование чисел
Такое представление чисел обозначает вот такое число: , где — цифры, а — основание системы счисления.
Посмотрим чему равны числа из примеров. Используем только что приведённую формулу:
- ;
- ;
- ;
- .
Мы разобрали, как узнать, чему равно число в любой системе счисления. Но как нам получить это число? Представим что у нас есть некоторое число , и мы хотим получить его представление в системе по основанию . Как нам это сделать?
Мы знаем, что число можно представить в виде , будем из этого исходить. Что будет, если мы поделим это число на . Получим
и остаток от деления . Почему ? Все члены суммы делятся на без остатка, а последний член в результате деления даёт и в остатке, так как максимальное значение цифры всегда на единичку меньше основания системы. Итак мы получили самую правую цифру , как остаток от деления, и число , как результат деления числа на . Если мы так будем продолжать делить, то получим все цифры .
Возьмём для примера полюбившееся нам число и получим представление этого числа в двоичной системе счисления:
- , остаток ;
- , остаток ;
- , остаток ;
- , остаток ;
- , остаток .
Что и следовало ожидать, получили: .
Представим число 25 в троичной системе счисления:
- , остаток ;
- , остаток ;
- , остаток .
Получили число: .
Для закрепления наших знаний проделаем вычисления для восьмеричной и десятичной систем счисления.
Восьмеричная система счисления:
- , остаток ;
- , остаток .
Результат: .
Десятичная система счисления:
- , остаток ;
- , остаток .
Результат: .
Чтобы ещё лучше понять перевод в различные системы счислений, посмотрим, какие трансформации происходят внутри числа .
Представим это число в виде
Посмотрим, что у нас получится при последовательном делении на :
- делим на , получаем и в остатке;
- делим ещё раз на , получаем и в остатке;
- и ещё раз делим на , получаем и в остатке;
- делим в последний раз на , получаем и в остатке.
Шестидесятеричная система счисления
То, как мы представляем время на часах, это пример шестидесятеричной позиционной системы счисления. В представлении времени используется три позиции: для часов, минут и секунд; так как для каждой позиции приходится использовать 60 цифр, а у нас только десять цифр, то для каждой шестидесятиричной позиции используется две десятичные цифры (00, 01, 02, …, 59), а позиции разделяются двоеточием.
Чтобы получить время в секундах мы должны посчитать вот по такой формуле:
.
Рассмотрим действия с шестидесятеричной системой на двух небольших задачках:
- Пирог нужно печь в духовке 45 минут, сколько это будет в секундах?
- Нужно испечь десять пирогов, сколько потребуется времени?
Чтобы производить вычисления в шестидесятеричной системе счисления нужно знать таблицу сложений и умножений шестидесятеричных чисел. Каждая таблица очень большая, она размером 60х60 ячеек, мы то обычную таблицу умножения еле запомнили, а уж выучить шестидесятиричную таблицу умножения нам врядли окажется по силам.
Чтобы решить эти задачи можно посчитать всё в десятичной системе, а потом результат перевести назад в шестидесятиричную систему.
Приступим. Чтобы перевести 45 минут в количество секунд, нужно просто, подставить числа в верхнюю формулу: h равняется нулю, m равняется 45 и s — нулю, получаем
.
Ответ на первый вопрос: пирог нужно печь в духовке 2700 секунд.
Чтобы узнать сколько потребуется времени чтобы испечь десять пирогов нужно время готовки умножить на количество пирогов, то есть на десять. , но это время в секундах, а нам бы хотелось получить время в привычных нам часах, минутах и секундах, для этого воспользуемся стандартным способом перевода из одной системы счисления в другую, делением на основание системы счисления. Приступим:
- и в остатке, записываем остаток в младший разряд хх: хх:00;
- и в остатке, записываем остаток в следующий разряд хх:30:00;
- и в остатке, записываем остаток в старший разряд 07:30:00.
Ответ на второй вопрос: чтобы испечь десять пирогов потребуется 7 часов 30 минут и 0 секунд.
Двоичная система счисления
В компьютерной технике очень часто используется двоичная система счисления. Такую систему очень легко реализовать в электронике (полупроводниковые транзисторы и микросхемы), так как для неё требуется всего два устойчивых состояния (0 и 1).
Двоичная система счисления может быть непозиционной и позиционной системой. В ней используется две цифры: 0 и 1. В реальном устройстве это может быть реализовано присутствием какого-либо физического явления или его отсутствием. Например: есть электрический заряд или его нет, есть напряжение или нет, есть ток или нет, есть сопротивление или нет, отражает свет или нет, намагничено или не намагничено, есть отверстие или нет и т.п.
Мы уже знаем, как переводить числа в различные системы счисления. Посмотрим, как это происходит с двоичной системой счисления. Переведём число из двоичной системы счисления в десятичную.
;
Вы это можете проверить на программе-калькуляторе (gcalctool в gnome, Kcalc в KDE, или калькулятор в Windows). Он умеет производить расчёты в двоичной, восьмеричной и шестнадцатиричной системах счисления. Теперь вы знаете, как он это проделывает. Если вы захотите посвятить свою жизнь программированию, то вам часто придётся работать со степенями двойки. Ниже представлена таблица:
Степень | Значение |
---|---|
0 | 1 |
1 | 2 |
2 | 4 |
3 | 8 |
4 | 16 |
5 | 32 |
6 | 64 |
7 | 128 |
8 | 256 |
9 | 512 |
10 | 1024 |
11 | 2048 |
12 | 4096 |
13 | 8192 |
14 | 16384 |
15 | 32768 |
16 | 65536 |
Произведём обратное преобразование. Чтобы преобразовать число в десятичном виде к двоичному, нам нужно будет делить всё время на два и смотреть на остаток от деления. Возьмём число 33.
- 33 : 2 = 16 остаток 1;
- 16 : 2 = 8 остаток 0;
- 8 : 2 = 4 остаток 0;
- 4 : 2 = 2 остаток 0;
- 2 : 2 = 1 остаток 0;
- 1 : 2 = 0 остаток 1;
Получили .
Возьмём число 55. Посмотрим, что получится.
- 55 : 2 = 27 остаток 1;
- 27 : 2 = 13 остаток 1;
- 13 : 2 = 6 остаток 1;
- 6 : 2 = 3 остаток 0;
- 3 : 2 = 1 остаток 1;
- 1 : 2 = 0 остаток 1.
Получили .
Ниже приведены ещё примеры со сложением, вычитанием, умножением и делением.
Сложение:
1001 1010 ---- 10011
Вычитание:
1110 0101 ---- 1001
Умножение:
1110 0101 ---- 1110 0000 1110 0000 ------- 1000110
Деление:
1000110|101 101 ----- ---- 0001110 111 101 --- 101 101 --- 00
Программа двоичного представления десятичного числа (Написана на Си)
#include <stdio.h>
#include <conio.h>
void dv(unsigned);
int main(int argc, char **argv)
{
unsigned x;
printf("Vvedite chislo > ");
scanf("%d", &x);
dv(x);
getch();
return 0;
}
void dv(unsigned x)
{
unsigned mask = 1, i;
mask <<= sizeof(unsigned) * 8 - 1;
for(i = 1; i <= sizeof(unsigned) * 8; i++)
{
printf("%c", x & mask ? '1' : '0');
x <<= 1;
if(!(i % 8))
printf(" ");
}
printf("\n");
}
Троичная система счисления
Из целочисленных систем счисления обладает наибольшей плотностью записи информации. Первая троичная ЭВМ «Сетунь» была построена в 1958 году Н. П. Брусенцовым в МГУ.
Четверичная система счисления
Обладает такой же плотностью записи, как и двоичная система счисления. Таблица такая же, как и для двоичной системы счисления.
Восьмеричная и шестнадцатеричная системы счислений
Компьютерам очень удобно оперировать двоичными числами, но люди не привыкли работать с большим количеством цифр. Например, чтобы представить в двоичном виде число 1234 потребуется больше 10 двоичных цифр (10011010010). Поэтому были придуманы восьмеричная и шестнадцатеричная системы счислений. Они удобны как и десятичные числа тем, что для представления числа требуется меньшее количество разрядов. А по сравнению с десятичными числами, перевод в двоичное представление очень простой. Это как будто мы двоичное число разбили на группы по три или четыре разряда и каждой двоичной комбинации придумали значок. Вот таблица для восьмеричных цифр:
Двоичная комбинация | Значок |
---|---|
000 | 0 |
001 | 1 |
010 | 2 |
011 | 3 |
100 | 4 |
101 | 5 |
110 | 6 |
111 | 7 |
А вот таблица для шестнадцатеричных цифр:
Двоичная комбинация | Значок |
---|---|
0000 | 0 |
0001 | 1 |
0010 | 2 |
0011 | 3 |
0100 | 4 |
0101 | 5 |
0110 | 6 |
0111 | 7 |
1000 | 8 |
1001 | 9 |
1010 | A |
1011 | B |
1100 | C |
1101 | D |
1110 | E |
1111 | F |
Перевод произвести очень просто, посмотрим на примере числа 010011010010.
Разбиваем его на группы по три цифры: 010 011 010 010. И по таблице переводим: .
Чтобы перевести число в шестнадцатеричное представление разбиваем двоичное число на группы по четыре цифры: 0100 1101 0010. И по таблице переводим: . С помощью калькулятора Windows мы можем убедиться, что всё проделано верно.
В программистских кругах шестнадцатеричные числа принято предварять значком 0x (например, 0x4D2), такое написание пошло от языка программирования C, либо значком $ (например, $4D2), такая нотация произошла от языка программирования Pascal. Иногда в литературе используют буквы «h» (от англ. hexadecimal) и «b» (от англ. binary) для обозначения соответственно шестнадцатеричных и двоичных чисел (например, FFh или 1011b).