Системы счисления
Разнообразные системы счисления, которые существовали раньше и которые используются в наше время, можно разделить на непозиционные и позиционные. Знаки, используемые при записи чисел, называются цифрами.
В непозиционных системах счисления от положения цифры в записи числа не зависит величина, которую она обозначает. Примером непозиционной системы счисления является римская система, в которой в качестве цифр используются латинские буквы:
I V X L C D M
1 5 10 50 100 500 1000
Например: VI = 5 + 1 = 6, а IX = 10 - 1 = 9.
Недостатки непозиционных систем счисления:
1) для записи больших чисел требуется вводить новые обозначения, которых будет все больше и больше;
2) непонятно, как записывать дробные и отрицательные числа
3) Не существует алгоритмов выполнения арифметических операций
В позиционных системах счисления величина, обозначаемая цифрой в записи числа, зависит от ее места в числе (позиции). Позиция цифры в числе называется разрядом. Разряд числа возрастает справа налево, от младших разрядов к старшим.
|
|
Основанием позиционной системы счисления называется число, которое показывает, во сколько раз изменяется значение цифры при перемещении ее на 1 разряд вправо или влево. Основание системы счисления равно количеству цифр в этой системе. счисления. Первая известная нам система, основанная на позиционном принципе - шестидесятеричная вавилонская. Цифры в ней были двух видов, одним из которых обозначались единицы, другим - десятки. Следы вавилонской системы сохранились до наших дней в способах измерения и записи величин углов и промежутков времени.
Однако наибольшую ценность для нас имеет индо-арабская десятичная система. Индийцы первыми использовали ноль для указания позиционной значимости величины в строке цифр. Эта система получила название десятичной, так как в ней десять цифр.
Для того чтобы лучше понять различие позиционной и непозиционной систем счисления, рассмотрим пример сравнения двух чисел. В позиционной системе счисления сравнение двух чисел происходит следующим образом: в рассматриваемых числах слева направо сравниваются цифры, стоящие в одинаковых позициях. Большая цифра соответствует большему значению числа. Например, для чисел 123 и 234, 1 меньше 2, поэтому число 234 больше, чем число 123. В непозиционной системе счисления это правило не действует. Примером этого может служить сравнение двух чисел IX и VI. Несмотря на то, что I меньше, чем V, число IX больше, чем число VI.
Далее мы будем рассматривать только позиционные системы счисления.
|
|
Основание системы счисления, в которой записано число, обычно обозначается нижним индексом. Например, 5557 - число, записанное в семеричной системе счисления. Если число записано в десятичной системе, то основание, как правило, не указывается. Основание системы - это тоже число, и его мы будем указывать в обычной десятичной системе. Вообще, число X в системе счисления с основанием q означает значение многочлена:
X = an*qn + an-1*qn-1 + …+ a1*q1 + a0*q0 +
a-1*q-1 + a-2*q-2 + … + a-m*q-m ,
где an...a0 - цифры в представлении данного числа.
Значения цифр изменяются от 0 до q-1.
Так, например,
123510 =1*103 + 2*102 + 3*101 + 5*100
12358 =1*83 + 2*82 + 3*81 + 5*80 = 1* 512 + 2*64 + 3*8 + 5 = 66910
11012 = 1*23 + 1*22 + 0*21 + 1*20 = 8 + 4 + 1 = 1310
B616 = 11*16 + 6 = 176 + 6 = 18210
Обратите внимание на то, что чем больше основание системы счисления, тем больше число, записанное определенной последовательностью цифр, например: 123510 > 12358, но однозначные числа (состоящие из одной цифры) имеют одно и то же значение во всех системах счисления: 510 = 58.
Наибольший интерес при работе на ЭВМ представляют системы счисления с основаниями 2, 8 и 16. Вообще говоря, этих систем счисления обычно хватает для полноценной работы как человека, так и вычислительной машины. Однако иногда в силу различных обстоятельств все-таки приходится обращаться к другим системам счисления, например к троичной, семеричной или системе счисления по основанию 32. Для того чтобы нормально оперировать с числами, записанными в таких нетрадиционных системах, важно понимать, что принципиально они ничем не отличаются от привычной нам десятичной. Сложение, вычитание, умножение в них осуществляется по одной и той же схеме.
В вычислительных же машинах используется двоичная система счисления, так как оперировать с числами, записанными в двоичном виде, довольно просто. Часто в информатике используют шестнадцатеричную систему, так как запись чисел в ней значительно короче записи чисел в двоичной системе. Может возникнуть вопрос: почему бы не использовать для записи очень больших чисел систему счисления, например по основанию 50? Для такой системы счисления необходимы 10 обычных цифр плюс 40 знаков, которые соответствовали бы числам от 10 до 49 и вряд ли кому-нибудь понравится работать с этими сорока знаками. Поэтому в реальной жизни системы счисления по основанию, большему 16, практически не используются.
Следует отметить, что большинство калькуляторов, реализованных на ЭВМ (в том числе и Calc), позволяют осуществлять работу в системах счисления с основаниями 2, 8, 16 и, конечно, 10.
Двоичная система счисления
Люди предпочитают десятичную систему, вероятно, потому, что с древних времен считали по пальцам. Но, не всегда и не везде люди пользовались десятичной системой счисления. В Китае, например, долгое время применялась пятеричная система счисления. В ЭВМ используют двоичную систему потому, что она имеет ряд преимуществ перед другими:
· для ее реализации используются технические элементы с двумя возможными состояниями (есть ток - нет тока, намагничен – ненамагничен);
· представление информации посредством только двух состояний надежно и помехоустойчиво;
· возможно применение аппарата булевой алгебры для выполнения логических преобразований информации;
· двоичная арифметика проще десятичной (двоичные таблицы сложения и умножения предельно просты).
В двоичной (binary) системе счисления всего две цифры, называемые двоичными (binary digits). Сокращение этого наименования привело к появлению термина бит, ставшего названием разряда двоичного числа. Веса разрядов в двоичной системе изменяются по степеням двойки. Поскольку вес каждого разряда умножается либо на 0, либо на 1, то в результате значение числа определяется как сумма соответствующих значений степеней двойки. Если какой-либо разряд двоичного числа равен 1, то он называется значащим разрядом. Запись числа в двоичном виде намного длиннее записи в десятичной системе счисления.
|
|
Арифметические действия, выполняемые в двоичной системе, подчиняются тем же правилам, что и в десятичной системе. Только в двоичной системе перенос единиц в старший разряд возникает чаще, чем в десятичной. Вот как выглядит таблица сложения в двоичной системе:
0 + 0 = 0 0 + 1 = 1
1 + 0 = 1 1 + 1 = 10 (перенос в старший разряд)
Таблица умножения для двоичных чисел еще проще:
0 * 0 = 0 0 * 1 = 0 1 * 0 = 0 1 * 1 = 1
Пример выполнения операции сложения в двоичной системе счисления:
1 1 1
1 0 1 12 Красным цветом показан перенос из младших разрядов в
+ 1 1 02 старшие
1 0 0 0 12
Для проверки правильности выполнения операции переведем все три числа из двоичной системы в 10-ую:
1011 = 1*23 + 1*21 + 1 = 8 + 2 + 1 = 1110
3 2 1 0
110 = 1*22 + 1*21 = 4 + 2 = 610
2 1 0
10001 = 1*24 + 1 = 16 + 1 = 1710
4 3 2 1 0
Сумма первых двух чисел (11 и 6) равна третьему числу (17), следовательно операция выполнена верно.
Обратите внимание на то, что при добавлении к числу, состоящему из единиц (11…1), еще одной единицы, получается число, равное 1 с количеством нулей, равным количеству единиц исходного числа, например:
1111 11112 + 1 = 1 0000 00002 = 28
Пример выполнения операции вычитания в двоичной системе счисления:
Вычитание выполняется по тем же правилам, что и в 10-ой системе, но в 10-й системе при замене единицы старшего разряда она превращается в 10 единиц младшего разряда, а в 2-й системе – в 2 единицы. Если нужно произвести заем не в соседнем разряде, а далее влево, то из каждых двух единиц текущего разряда одна остается в этом разряде, а вторая передается вправо. Сравните:
9 9 10 1 1 2
1 0 0 010 1 0 0 02
- 1 - 1
9 9 910 1 1 12
|
|
Выполним в 2-й системе счисление вычитание 1710 – 610 :
0 1 1 2
1 0 0 0 12
- 1 1 02
1 0 1 12 = 1110 Проверка показывает, что вычитание выполнено верно.
Если в двоичной системе счисления из числа, являющегося степенью двойки, вычесть 1, то получается число, состоящее из единиц, количество которых равно количеству нулей двоичного числа, например:
28 - 1 = 1 0000 00002 – 1 = 1111 11112
1023 = 1024 – 1 = 210 – 1 = 11 1111 11112
Пример выполнения операции умножения в двоичной системе счисления:
1 1 0 12 = 1310
* 1 0 12 = 510
1 1 0 1
+1 1 0 1
1 0 0 0 0 0 12 = 26 +1 = 64 +1 =6510 (13 * 5 = 65)
6 5 4 3 2 1 0
Рассмотрим подробнее, как процессор выполняет умножение двоичных чисел. Пусть надо умножить число 1101 на 101 (оба числа в двоичной системе счисления). Машина делает это следующим образом: она берет число 1101 и, если первый справа элемент второго множителя равен 1, то она заносит его в сумму. Затем сдвигает число 1101 влево на одну позицию, получая тем самым 11010, и, если, второй элемент второго множителя равен единице, то добавляет его к сумме. Если элемент второго множителя равен нулю, то сумма не изменяется. Этот процесс сдвигов и сложений повторяется.
Пример выполнения операции деления в двоичной системе счисления:
Двоичное деление основано на методе, знакомом вам по десятичному делению, т. е. сводится к выполнению операций умножения и вычитания. Выполнение основной процедуры - выбор числа, кратного делителю и предназначенного для уменьшения делимого, здесь проще, так как таким числом могут быть только либо 0, либо сам делитель.
В качестве примера разделим 14310 = 100011112 на 1310 = 11012
1 0 0 0 1 1 1 1 1 1 0 1
- 1 1 0 1 1 0 1 12 = 1110
1 0 0 1 1
- 1 1 0 1
1 1 0 1
- 1 1 0 1
0
Проверка показывает, что деление выполнено верно (143 / 13 = 11).
Умножение или деление двоичного числа на 2 приводит к перемещению запятой, отделяющей целую часть от дробной на один разряд соответственно вправо или влево:
10112 * 102 = 101102.
10112 / 102 = 101.12.
Ая система счисления
При наладке аппаратных средств ЭВМ или создании новой программы возникает необходимость "заглянуть внутрь" памяти машины, чтобы оценить ее текущее состояние. Но там все заполнено длинными последовательностями нулей и единиц двоичных чисел. Эти последовательности очень неудобны для восприятия человеком, привыкшим к более короткой записи десятичных чисел. Кроме того, естественные возможности человеческого мышления не позволяют оценить быстро и точно величину числа, представленного, например, комбинацией из 16 нулей и единиц.
Для облегчения восприятия двоичного числа решили разбивать его на группы разрядов, например, по три или четыре разряда. Эта идея оказалась очень удачной, так как последовательность из трех бит имеет 8 комбинаций, а последовательность из 4 бит - 16. Числа 8 и 16 являются степенями двойки, поэтому легко находить соответствие с двоичными числами. Развивая эту идею, пришли к выводу, что группы разрядов можно закодировать, сократив при этом длину последовательности знаков. Для кодировки трех битов требуется восемь цифр, поэтому взяли цифры от 0 до 7 десятичной системы. Для кодировки же четырех битов необходимо шестнадцать знаков; для этого взяли 10 цифр десятичной системы и 6 букв латинского алфавита: A, B, C, D, E, F. Полученные системы, имеющие основания 8 и 16, назвали соответственно восьмеричной и шестнадцатеричной.
В восьмеричной (octal) системе счисления используются восемь различных цифр: 0, 1, 2, 3, 4, 5, 6, 7. Основание системы - 8. При записи отрицательных чисел перед последовательностью цифр ставят знак минус. Сложение, вычитание, умножение и деление чисел, представленных в восьмеричной системе, выполняются весьма просто, подобно тому, как это делают в общеизвестной десятичной системе счисления.
Пример выполнения операции сложения в восьмеричной системе счисления:
1 1 Красным цветом показан перенос из младших разрядов в старшие.
4 7 6 Выполнение операции в каждом разряде:
+ 3 4 1) 6 + 4 = 10 = 1*8 + 2 = 128
5 3 2 2) 1 + 7 + 3 = 1*8 + 3 = 138
3) 1 + 4 = 5
Проверим результат путем перевода чисел в десятичную систему счисления:
4768 = 4*82 + 7*8 + 6 = 318 318
348 = 3*8 + 4 = 28 +28
532 = 5*82 + 3*8 + 2 = 346 346
Пример выполнения операции вычитания в восьмеричной системе счисления:
7 8 Красным цветом показан перенос из старших разрядов в младшие.
5 3 2 Выполнение операции в каждом разряде:
- 3 4 1) 8 + 2 – 4 = 6
4 7 6 2) 7 + 2 - 3 = 1 *8 + 3 = 138
3) 1 + 4 = 5
Пример выполнения операции умножения в восьмеричной системе счисления:
5 4 54 4*4 = 16 = 2 *8 + 0 = 208 (записываем 0)
* 3 4 * 4 2+ 5*4 = 22 = 2 *8 + 6 = 268
2 6 0 260
+ 2 0 4
2 3 2 0 54 4*3 = 12 = 1 *8 + 4 = 148 (записываем 4)
* 3 1 + 5*3 = 16 = 2 *8 + 0 = 208
204
Выполним проверку:
548 = 5*8 + 4 = 4410 44
348 = 3*8 + 4 = 2810 * 28
23208 = 2*83 + 3*82 + 2*8 = 123210 352
+ 88 = 123210
Пример выполнения операции деления в восьмеричной системе счисления:
2 3 2 08 5 48
- 2 0 4 3 48
2 6 0
- 2 6 0
0
Деление в восьмеричной системе близко делению в десятичной системе: нужно подобрать цифры частного. 232 делим на 54, в десятичной системе мы получили бы целое частное 4, но из предыдущего примера мы знаем, что в восьмеричной системе 54*4 = 260, это много, попробуем взять цифру поменьше – 3, умножаем 54*3 = 204, эта цифра подходит, и т.д.
В различных языках программирования запись восьмеричных чисел начинается с 0, например, запись 011 означает десятичное число 9.
Ая система счисления
В шестнадцатеричной (hexadecimal) системе счисления применяются десять цифр от 0 до 9 и шесть первых букв латинского алфавита:
10 – A 11 – B 12 – C 13 – D 14 – E 15 – F.
При записи отрицательных чисел слева от последовательности цифр ставят знак минус.
Для того чтобы при написании компьютерных программ отличить числа, записанные в шестнадцатеричной системе, от других, перед числом ставят 0x. То есть 0x11 и 11 - это разные числа.
Шестнадцатеричная система счисления широко используется при задании различных оттенков цвета при кодировании графической информации (модель RGB). Так, в редакторе гипертекста Netscape Composer можно задавать цвета для фона или текста как в десятичной, так и шестнадцатеричной системах счисления (см. рисунок).
Пример выполнения операции сложения в 16-ой системе счисления:
1 1 Красным цветом показан перенос из младших разрядов
A 7 B16 Выполнение операции в каждом разряде:
+ C 816 B + 8 = 11 + 8 = 19 = 1*16 + 3 = 1316 (записываем 3)
B 4 316 1+7+С = 8+12 = 20 = 1*16 + 4 = 1416 (записываем 4)
1 + A = B
Проверим результат путем перевода чисел в 10-ю систему:
A7B16 = 10*162 + 7*16 +11 = 2683
2 1 0 2683
C816 = 12*16 + 8 = 200 + 200
1 0 2883
B4316 = 11*162 + 4*16 +3 = 2883
2 1 0
Пример выполнения операции вычитания в 16-ой системе счисления:
15 16 Красным цветом показан заем из старших разрядов
B 4 316 Выполнение операции в каждом разряде:
- A 7 B16 16 + 3 – B = 19 -11 = 8
C 816 15 + 4 – 7 = 12 = C
B - 1 – A = 0
Умножение и деление в 16-ой системе обычно не выполняется ввиду сложности вычислений.