av афафы фаафы för 4 årar sedan
323
Mer av detta
Майя использовали 20-ричную систему счисления за одним исключением: во втором разряде было не 20, а 18 ступеней, то есть за числом (17)(19) сразу следовало число (1)(0)(0). Это было сделано для облегчения расчетов календарного цикла, поскольку (1)(0)(0) = 360 примерно равно числу дней в солнечном году.
b-ричная система счисления определяется натуральным числом b > 1, называемым основанием системы счисления. x в b-ричной системе счисления его представляют в виде линейной комбинациистепеней числа b
Такие системы счисления отличаются от обычных тем, что используют цифры не из множества (0, \ldots, b-1), а из множества (-\frac{b-1}{2}, -\frac{b-3}{2}, \ldots, \frac{b-1}{2}). Чтобы цифры были целыми, нужно, чтобы b было нечётным. В симметричных системах счисления не требуется дополнительных обозначений для знака числа. Кроме того, вычисления в симметричных системах удобны тем, что не требуется особых правил округления — оно сводится к простому отбрасыванию лишних разрядов, что резко уменьшает систематические ошибки вычислений.
Чаще всего используется симметричная троичная система счисления с цифрами (-1,0,1). Она применяется в троичной логике и была технически реализована в вычислительной машине «Сетунь».
Для перевода дробной части числа в другие системы счисления нужно обратить целую часть в нуль и начать умножение получившегося числа на основание той системы, в которую нужно перевести. Если в результате умножения будут снова появляться целые части, их нужно повторно обращать в нуль, предварительно запомнив (записав) значение получившейся целой части. Операция заканчивается, когда дробная часть полностью обратится в нуль. Ниже приводится пример перевода числа 103,62510 в двоичную систему счисления.
Переводим целую часть по правилам, описанным выше, получаем 10310 = 11001112. 0,625 умножаем на 2. Дробная часть 0,250. Целая часть 1. 0,250 умножаем на 2. Дробная часть 0,500. Целая часть 0. 0,500 умножаем на 2. Дробная часть 0,000. Целая часть 1. Итак, сверху вниз получаем число 1012 103,62510 = 1100111,1012
Точно также осуществляется перевод в системы счисления с любым основанием.
Сразу нужно отметить, что этот пример специально подобран, в общем случае очень редко удаётся завершить перевод дробной части числа из десятичной системы в другие системы счисления, а потому, в подавляющем большинстве случаев, перевод можно осуществить с какой либо долей погрешности. Чем больше знаков после запятой — тем точнее приближение результата перевода к истине. В этих словах легко убедиться, если попытаться, например, перевести в двоичный код число 0,626.
Перевод дробной части из двоичной системы счисления в системы счисления с основаниями 8 и 16 осуществляется точно также, как и для целых частей числа, за тем лишь исключением, что разбивка на октавы и тетрады идёт вправо от десятичной запятой, недостающие разряды дополняются нулями справа. Например, рассмотренное выше число 1100,0112 будет выглядеть как 12,38 или C,616.
Пример перевода двоичного числа 1100,0112 в десятичное. Целая часть этого числа равна 12 (см. выше), а вот перевод дробной части рассмотрим подробнее:
Итак, число 1100,0112 = 12,37510.
Точно также осуществляется перевод из любой системы счисления, только вместо «2» ставится основание системы.
Для удобства перевода, целую и дробную части числа почти всегда переводят по-отдельности, а результат потом суммируют.
Для этого типа операций существует упрощенный алгоритм-перевёртыш.
Для восьмеричной — преобразуем по таблице в триплеты
0 000 4 100 1 001 5 101 2 010 6 110 3 011 7 111
Для шестнадцатеричной — преобразуем по таблице в квартеты
0 0000 4 0100 8 1000 C 1100 1 0001 5 0101 9 1001 D 1101 2 0010 6 0110 A 1010 E 1110 3 0011 7 0111 B 1011 F 1111
Пример:
преобразуем 548 → 101 100 2C16 → 0010 1100
Для этого типа операций существует упрощенный алгоритм.
Для восьмеричной — разбиваем число на триплеты, преобразуем триплеты по таблице
000 0 100 4 001 1 101 5 010 2 110 6 011 3 111 7
Для шестнадцатеричной — разбиваем на квартеты, преобразуем по таблице
0000 0 0100 4 1000 8 1100 C 0001 1 0101 5 1001 9 1101 D 0010 2 0110 6 1010 A 1110 E 0011 3 0111 7 1011 B 1111 F
Пример:
преобразуем 1011002 восьмеричная — 101 100 → 548 шестнадцатеричная — 0010 1100 → 2C16
Для перевода необходимо делить число с остатком на основание счисления до тех пор, пока частное больше основания счисления.
Пример:
4410 переведём в двоичную систему 44 делим на 2. частное 22, остаток 0 22 делим на 2. частное 11, остаток 0 11 делим на 2. частное 5, остаток 1 5 делим на 2. частное 2, остаток 1 2 делим на 2. частное 1, остаток 0 1 делим на 2. частное 0, остаток 1 Частное равно нулю, деление закончено. Теперь записав все остатки справа налево получим число 1011002
Для записи чисел системы счисления с основанием до 36 включительно в качестве цифр используются арабские цифры (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) и затем буквы латинского алфавита (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z). При этом, a = 10, b = 11 и т. д., иногда x = 10.
При одновременной работе с несколькими системами счисления для их различения основание системы обычно указывается в виде нижнего индекса, который записывается в десятичной системе:
12310 — это число 123 в десятичной системе счисления;
11110112 — то же число, но в двоичной системе.
В некоторых специальных областях применяются особые правила указания основания. Например, в программировании шестнадцатеричная сиситема обозначается:
В некоторых диалектах языка Си по аналогии с «0x» используется префикс «0b» для обозначения двоичных чисел. (Обозначение «0b» не входит в стандарт ANSI C.)
В непозиционных системах счисления величина, которую обозначает цифра, не зависит от положения в числе. При этом система может накладывать ограничения на положение цифр, например, чтобы они были расположены в порядке убывания.
Формула перевода имеет вид:
A = a1*B1+a2*B2+…+an*Bn-r*P, где a1, …, an - представление числа А в СОК с основаниями p1, p2, …, pn;
P = p1, p2, …, pn;
r = 0,1,2,… (целые числа), причем r выбирают так, чтобы разность между левой и правой частью выражения была меньше P;
Bi = (P/pi)*ki, где ki = 1, 2, …, pi, причем ki выбирается таким, чтобы остаток от деления Bi/pi был равен 1.
Пример.
А = (2,4,6) в системе с основаниями: p1 = 3, p2 = 5, p3 = 7.
P = p1*p2*p3 = 3*5*7 = 105.
B1 = 105/3*k1 = 35*2 =70;
B2 = 105/5*k1 = 21*1 =21;
B3 = 105/7*k1 = 15*1 =15;
A = 2*70+4*21+6*15 - r*105;
A = 314 - r*105 = 104, где r=2.