Для того чтобы понять, что именно мы записываем, записывая числа, нужно понять, что такое на самом деле числа и что мы записываем с помощью чисел.
Каждое целое число означает, сколько единиц (штук чего-то) содержится в этом числе (записано с помощью этого числа). То есть, речь может идти, например, о куче камней, в которой находится какое-то определённое количество камней. Мы можем записать это количество на листе бумаги, используя, например, черточки. А затем эти чёрточки пересчитать. Точно так же мы можем заменить чёрточки единичками и каждый раз пересчитывать единички. Разумеется, это неудобно, однако, гораздо проще, чем каждый раз ворочать камни в куче чтобы их пересчитывать.
Когда единичек становится очень много, пересчитывать их становится трудно, долго и появляется шанс ошибиться при подсчётах. Однако, единички можно группировать и считать их сразу группами. Например, можно считать их группами по 8. Таким образом мы можем 15 единичек записать как 1 х 8 + 7 (одна группа из 8 единиц и ещё 7 единиц, которых не хватает для составления полной группы). Заметим, что 7 – меньше выбранного нами размера группы и фактически является остатком от деления исходного числа 15 на выбранной нами размер группы – 8. А число 16 тогда можно записать как 2 х 8, то есть, две полных группы по 8 единиц.
Таким образом, для такой записи нам необходимо иметь два разряда:
- разряд для записи свободных единичек, целиком не поместившихся в группы,
- разряд для записи количества полных групп.
Когда количество групп становится очень большим, можно начать группировать уже сами группы. Теперь нам понадобится следующий, третий разряд, содержащий количество сгруппированных групп. И так далее.
Теперь вспомним, что такое цифра и чем цифра отличается от числа. Цифра – это символ (точно такой же как буква), с помощью которого можно записывать числа – точно так же, как с помощью букв мы записываем слова. При этом цифра – далеко не то же самое, что число. Цифра (так же как и буква) сама по себе ничего не значит, это всего лишь символ, значок. Цифра имеет смысл и значение только в записи числа. При этом не стоит путать цифры и однозначные числа – так же как не стоит путать, например, букву “а” и союз “а”: число 5 обозначает число, состоящее из 5 единиц, а цифра “5” обозначает что-то только в том случае, если она присутствует в записи числа и может обозначать далеко не только “5 единиц”.
Десятичная система счисления
Мы привыкли к десятичной системе счисления просто потому что пальцев на руках у нас 10 и нам удобнее группировать единички десятками. Группы из десятков единичек можно группировать тоже десятками: будут получаться сотни, сотни опять группировать в десятки и получать тысячи, и так далее. Однако, сути это менять не будет. Нам всё равно нужно как-то записывать количество единичек.
Таким образом, числа мы записываем с помощью цифр, стоящих в соответствующих позициях – разрядах. В зависимости от положения цифры в записи числа (её места, разряда) меняется её фактическое значение: например, цифра 7 в первом разряде означает число 7, а цифра 7 во втором разряде означает 7 десятков – 7 х 10 = 70. Для третьего разряда это будет уже 7 десятков десятков – 7 х 10 х 10 =700 или 7 сотен. И так далее.
Назначение цифр – информировать нас о том, сколько единиц соответствующего разряда присутствует в данном числе. Единицей соответствующего разряда (или его весом) можно назвать количество единичек, соответствующее единице данного разряда. Например, для второго разряда это 10, для третьего 100. И так далее.
Если мы посмотрим на ряд этих величин (весов разрядов):
1
10
100
1000
10000
100000
1000000
10000000
100000000
…
то увидим, что все они составляют последовательные степени числа 10, основания нашей десятичной системы:
100 = 1
101 = 10
102 = 100
103 = 1000
104 = 10000
105 = 100000
106 = 1000000
107 = 10000000
108 = 100000000
…
То есть, например, в числе 20365 содержится 5 единиц, 6 десятков, 3 сотни, 0 тысяч и 2 десятка тысяч: 5 х 100 + 6 х 101 + 3 х 102 + 0 х 103 + 2 х 104 – всего 20365 единиц. Для того чтобы определить, сколько единиц содержится в любом числе, нам нужно разбить его на цифры по разрядам и для каждой цифры число, соответствующее этой цифре умножить на вес соответствующего разряда.
Математически разбить число, записанное в привычной нам десятичной системе счисления, на разряды проще всего путем последовательного деления этого числа на основание системы счисления – на 10.
Возьмём число 365. Остатком от деления его на 10 является число 5 – значение (цифра) первого разряда (разряда единиц):
ост. от 365 / 10 = 5 (это самый младший разряд)
Если отделить этот разряд от исходного числа, у нас останется число 36. Остатком от деления его на 10 будет 6:
ост. от 36 / 10 = 6
Отделяем от числа второй разряд и получаем число 3. Остатком от деления его на 10 будет 3:
ост. от 3 / 10 = 3
Таким образом мы математически разбили число на разряды, однако, в математике не существует операции “отделить разряд”. Для этой цели можно воспользоваться следующей операцией: определить остаток от деления, а затем вычесть этот остаток из исходного числа и получившееся число поделить на 10:
ост. от 365 / 10 = 5
36 = (365 – 5) / 10
То же самое нужно проделать на каждом шаге для получения нужного результата.
Те же самые операции, записанные в “столбик”:
Теперь, когда у нас есть цифры всех разрядов числа, мы можем собрать значение самого числа (количество единичек в этом числе):
5 х 100 + 6 х 101 + 3 х 102 = 5 х 1 + 6 х 10 + 3 х 100 = 5 + 60 + 300 = 365
Мы научились выполнять два преобразования: разбили число на разряды, а затем преобразовали число в количество единиц, которое записано с помощью цифр в десятичной системе счисления. Точно такие же операции используются для перевода чисел из одной системы счисления в другую.
Двоичная система счисления
Двоичная система счисления была придумана очень давно. Однако с появлением первых компьютеров оказалось, что именно она наиболее удобна для взаимодействия с компьютерами, потому что в электронных схемах компьютеров существует два элементарных состояния: “включено” и “выключено”, которые очень легко обозначить цифрами 0 и 1.
Основанием двоичной системы счисления является число 2, а цифрами в этой системе являются 0 и 1. Для удобства восприятия у двоичных чисел принято писать индекс в виде цифры 2, обозначающий, что число записано в двоичной системе счисления (или, как часто говорят “двоичное число”):
10011012
Точно так же как в десятичной системе счисления, в двоичной системе счисления значение числа (количество единичек) определяется записью цифр в соответствующие разряды. Только разряды эти двоичные: в каждом из них может быть либо 0, либо 1 и веса этих разрядов определяются не степенями 10 (как в привычной нам десятичной системе счисления), а степенями 2.
Запишем эти степени, чтобы понять, как определить значение двоичных чисел:
20 = 1
21 = 2
22 = 4
23 = 8
24 = 16
25 = 32
26 = 64
27 = 128
28 = 256
29 = 512
210 = 1024
…
Теперь возьмём двоичное число, например 10110012, и определим его значение (сколько в нём единичек). Для этого разобьем его на разряды и, так же как для десятичного числа, умножим значения цифр, стоящих в этих разрядах на соответствующие этим разрядам степени 2 (веса этих разрядов):
1 х 20 + 0 х 21 + 0 х 22 + 1 х 23 + 1 х 24 + 0 х 25 + 1 х 26 = 1 + 0 + 0 + 8 + 16 + 0 + 64 = 89
Таким образом, двоичному числу 10110012 соответствует десятичное число 89.
Для обратного преобразования воспользуемся тем же методом, которым мы разбивали на десятичные разряды число 365: будем его пошагово делить с остатком на основание той системы счисления, запись в которой мы хотим получить (в данном случае – 2):
ост. от 365 / 2 = 1 (это будет самый младший разряд)
182 = (365 – 1) / 2
результат деления числа 365 с учётом остатка (это число 364 = 365 – 1) на 2 = 182
ост. от 182 / 2 = 0
91 = (182 – 0) / 2
результат деления числа 182 с учётом остатка (а это число 182 = 182 – 0) на 2 = 91
ост. от 91 / 2 = 1
45 = (91 – 1) / 2
ост. от 45 / 2 = 1
22 = (45 – 1) / 2
ост. от 22 / 2 = 0
11 = (22 – 0) / 2
ост. от 11 / 2 = 1
5 = (11 – 1) / 2
ост. от 5 / 2 = 1
2 = (5 – 1) / 2
ост. от 2 / 2 = 0
1 = (2 – 0) / 2
ост. от 1 / 2 = 1
на этом наше число заканчивается. Больше единичек в этом числе не осталось.
Те же самые операции, записанные в “столбик”:
Полученное двоичное число записывается точно так же как и десятичное:
1011011012
Таким образом, десятичному числу 365 соответствует двоичное число 1011011012 , что нетрудно проверить, выполнив обратное преобразование – разобьем наше двоичное число на разряды и умножим значения цифр, стоящих в этих разрядах на соответствующие этим разрядам степени числа 2 (основания двоичной системы счисления):
1 х 20 + 0 х 21 + 1 х 22 + 1 х 23 + 0 х 24 + 1 х 25 + 1 х 26 + 0 х 27 + 1 х 28 = 1 + 0 + 4 + 8 + 0 + 32 + 64 + 0 + 256 = 365
Восьмеричная система счисления
Все вышеперечисленное относится к любой позиционной (разрядной) системе счисления. Все операции должны учитывать основание системы и, как следствие, количество цифр. Так в восьмеричной системе счисления основанием является число 8, и цифр тоже всего 8: от 0 до 7.
Поэтому для работы в этой системе нам необходимо знать степени 8:
80 = 1
81 = 8
82 = 64
83 = 512
84 = 4096
…
Поэтому число 15 в восьмеричной системе будет записано как 178. Это можно записать в виде равенства, если указать в качестве индекса основание системы счисления:
1510 = 178
А восьмеричное число 126 содержит в себе 86 единичек и равно, соответственно, десятичному числу 86:
1268 = 6 х 80 + 2 х 81 + 1 х 82 = 6 + 16 + 64 = 8610
При переводе любого десятичного числа в восьмеричное мы должны точно так же, как и в предыдущих случаях, пошагово делить его на основание системы счисления (8) с остатком, в результате чего полученные остатки и составят разряды нашего восьмеричного числа:
ост. от 365 / 8 = 5
45 = (365 – 5) / 8
ост. от 45 / 8 = 5
5 = (45 – 5) / 8
ост. от 5 / 8 = 5
Те же самые операции, записанные в “столбик”:
Таким образом:
36510 = 5558
Для выполнения обратного преобразования разобьём получившееся восьмеричное число на разряды и посчитаем количество единичек с учётом весов соответствующих восьмеричных разрядов:
5558 = 5 х 80 + 5 х 81 + 5 х 82 = 5 + 40 + 320 = 365
Шестнадцатеричная система счисления
Чуть более сложная ситуация возникает когда основание системы счисления больше 10 и обычных десятичных цифр просто не хватает для записи чисел. Для шестнадцатеричной системы счисления в качестве недостающих 5 цифр (11 – 15) решено было использовать первые буквы латинского (английского) алфавита: A, B, C, D, E, F, где:
A = 1010
B = 1110
С = 1210
D = 1310
E = 1410
F = 1510
Таким образом, число F16 соджержит 15 единичек и может быть записано в виде обычного десятичного числа 15. Для работы с шестнадцатеричной системой счисления необходимо знать степени числа 16:
160 = 1
161 = 16
162 = 256
163 = 4096
164 = 65536
…
Так шестнадцатеричное число А29 равно десятичному числу 2601:
А2916 = 9 х 160 + 2 х 161 + 10 х 162 = 9 + 32 + 2560 = 2601
При переводе любого десятичного числа в шестнадцатеричное мы будем пошагово делить его на 16 с остатком, а полученные остатки и составят разряды нашего шестнадцатеричного числа:
ост. от 365 / 16 = 13 (D16)
22 = (365 – 13) / 16
ост. от 22 / 16 = 6
1 = (22 – 6) / 16
ост. от 1 / 16 = 1
Те же самые операции, записанные в “столбик”:
Получаем:
36510 = 16D16
Максимальное число
Если в обычной математике числа могут быть сколь угодно большими и сколь угодно малыми, а бесконечность – вполне адекватное понятие, то для компьютера это не так. Коспьютер может оперировать лишь конечными величинами. И эти ограничения могут быть связаны, например, с разрядностью процессора или размером ячеек памяти, ктотрые могут быть размером 1 байт (8 бит), 2 байта, 4, 8, и даже 16 байт. При этом целые числа, которые можно записывать в такие ячейки памяти не могут быть бесконечно большими. Так в 1 байт можно записать положительные целые числа от 0 до 255 (без знака):
010 = 000000002
25510 = 111111112
или, если один разряд ячейки использовать для хранения знака числа, то можно будет хранить меньшие числа: от -127 до +127. Также один байт может содержать два шестнадцатеричных разряда, например, максимальное значение будет равно FF16 = 25510.
Для того чтобы легко и быстро определить максимальное число, которое можно записать в какую-то ячейку памяти достаточно отбросить знаковый разряд, если ячейка предназначена для чисел со знаком, а затем определить степень двойки, соответсвующую разряду на 1 большему, чем самый старший значащий разряд в ячейке памяти (разряд для знака – не значащий) и вычесть из соответствующего числа 1. Возьмём, например, один байт без знака:
количество разрядов – 8,
степень двойки, соответствующая старшему разряду – 7,
увеличиваем степень на 1 – получаем 8 (исходное количество разрядов!),
возводим 2 в 8 степень – получаем 256,
отнимаем единицу – получаем 255.
Или совсем просто: количество разрядов – 8, возводим 2 в 8 степень – получаем 256, отнимаем единицу – получаем 255.
Если рассмотреть ячейку в один байт для хранения целого числа со знаком, то:
количество разрядов будет – 7 (1 разряд – для хранения знака числа),
степень двойки, соответствующая старшему разряду – 6,
увеличиваем степень на 1 – получаем 7,
возводим 2 в 7 степень – получаем 128,
отнимаем единицу – получаем 127.
То же самое можно проделать для любой ячейки памяти: например, 10 двоичных разрядов могут хранить целые числа без знака в диапазоне от 0 до 1023 (210 – 1 = 1023), а со знаком, соответственно, от -511 до +511 (29 – 1 = 511, один разряд – для хранения знака числа).
Правило вычитания единицы применимо к любой системе счисления, так как добавление единицы к максимальному числу приводит к увеличению разрядности числа:
Максимальное трёхзначное десятичное число – это 999: количество разрядов – 3, возводим 10 в 3 степень – получаем 1000, отнимаем единицу – получаем 999.
Максимальное двухзначное шестнадцатеричное число – это FF или 25510 количество разрядов – 2, возводим 16 в 2 степень – получаем 256, отнимаем единицу – получаем 255.
Быстрый переход между системами
Для того чтобы перевести число из одной системы в другую можно, например, сначала перевести его в десятичную, а потом из десятичной – в нужную нам систему.
Однако, в случае, когда перевод осуществляется между двоичной, четверичной, восьмеричной и шестнадцатеричной системами, всё оказывается гораздо проще. Так как основанием этих систем являются степени двойки, то для перехода достаточно понять, какое количество разрядов одной системы соответствует одному разряду другой.
Наиболее просто начать с перехода между четверичной и двоичной системами. Здесь два разряда двоичной системы будут соответствовать одному разряду четверичной:
002 = 04
012 = 14
102 = 24
112 = 34
Поэтому при переходе от двоичной к четверичной системе мы просто будем разбивать двоичное число на пары разрядов, начиная с младшего (справа налево), и дополняя, при необходимости, последний двоичный разряд (если число разрядов в двоичном числе было нечётным) предстоящим нулём до пары:
10010100100112
разбиваем на пары и дополняем нечётный старший разряд нулём:
01 00 10 10 01 00 11
теперь ставим в соответствие каждой паре её значение, записанное в четверичной системе:
1 0 2 2 1 0 3
Таким образом:
10010100100112 = 10221034
То же самое нужно сделать для того, чтобы быстро перейти от двоичной системы к восьмеричной, но тут двоичное число необходимо разбивать уже на так называемые триады (группы по три цифры), начиная от младших разрядов и заканчивая старшими, и дополняя нулями последнюю триаду, если она окажется неполной (содержит одну или две цифры). Каждая триада будет соответсвовать одному восьмеричному разряду:
0002 = 08
0012 = 18
0102 = 28
0112 = 38
1002 = 48
1012 = 58
1102 = 68
1112 = 78
Например, для перевода числа 11011102 в восьмеричную систему разобьём его на триады с дополнением старшей триады нулями:
001 101 110
теперь поставим в соответствие каждой триаде её значение в восьмеричной системе:
1 5 6
получим:
11011102 = 1568
Лёгкий переход в шестнадцатеричную систему и обратно удобен для двоичной и четверичной систем: здесь разряды двоичного числа нужно разбивать на четвёрки (иногда называемые «тетрадами»), а четверичного – на пары. Так, например:
316 = 034 = 00112
716 = 134 = 01112
A16 = 224 = 10102
D16 = 314 = 11012
F16 = 334 = 11112
Таким образом, переход между системами счисления, имеющими в качестве основания различные степени одного и того же числа в некоторых случаях упрощается за счет возможности группировки разрядов.
Заключение
Мы рассмотрели основные системы счисления, использующиеся в вычислительной технике и информатике и преобразования между ними. Надо сказать, что оптимальным основанием для компьютерной системы счисления математики считают не число 2 и даже не число 3, а число e (иногда такую систему счисления называют “e-ичная”). Число e является основанием натурального логарифма, математической константой, иррациональным и трансцендентным числом, которое играет важную роль в дифференциальном и интегральном исчислении, а также во многих других разделах математики. Поскольку функция экспоненты ex интегрируется и дифференцируется «сама в себя», логарифмы по основанию числа e называются натуральными.
Приблизительное значение числа e = 2,7182818284590452353602874713527…
Поделиться:
Пишите нам в комментариях, какие элементарные или кажущиеся таковыми, вопросы из различных областей человеческих знаний вам хотелось бы разобрать: