Категории: Все - программирование - перевод

по афафы фаафы 4 лет назад

326

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

В основе позиционных систем счисления лежит натуральное число, называемое основанием. Числа в таких системах представляются как линейные комбинации степеней этого основания. Для записи чисел в системах с основанием до 36 используются арабские цифры и латинские буквы.

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

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

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

Система счисления майя

Майя использовали 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 (см. выше), а вот перевод дробной части рассмотрим подробнее:


 0,011 = 0 \cdot 2^{-1} + 1 \cdot 2^{-2} + 1 \cdot 2^{-3} = 0 + 0,25 + 0,125 = 0,375.


Итак, число 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.

Римская система счисления