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

Система счисления - это определенный способ записи чисел и соответствующие ему правила действия над числами. Системы счисления бывают позиционными и непозиционными.

В позиционной системе счисления величина, которую обозначает цифра в записи числа, зависит от позиции цифры в этом числе. Совокупность различных цифр, используемых в позиционной системе счисления для записи чисел, называется алфавитом системы счисления. Для представления цифр больше 9 используют латинские буквы (А=10, В=11…). Основание системы счисления - это размер алфавита. Число в позиционной системе можно представить в виде суммы произведений составляющих его цифр на соответствующие степени основания системы.

Любая позиционная система вводится следующим образом. Выбирается основание р — целое число и алфавит из р цифр:
0, 1, 2, …, р-1.
Тогда любое число Х в этой системе представляется в виде суммы произведений:
Х = аnn + an-1*pn-1 + … + a0*p0
Здесь Х — это число в системе с основанием p, имеющее n+1 цифру в целой части — это цифры из алфавита системы.

Перевод чисел из одной позиционной системы в другую

При переводе чисел из десятичной системы в р-ичную надо разложить десятичное число на слагаемые, содержащие степени числа р. Перевод целого десятичного числа производится путем последовательного деления числа на основание р с выделением остатков от деления до тех пор, пока частное не станет меньше делителя. Выписывая остатки от деления справа налево, получаем р-ричную запись десятичного числа.

Функция перевода числа из 10-чной системы в R-ричную:

function DecToR (x: longint; R: word): string;
var
     result: string;
     remainder: word;
     c: char;
begin
     result := '';
     while x <> 0 do
     begin
          remainder  :=  x mod R;
          x  :=  x div R;
          if remainder < 10 then
               c  :=  chr (remainder + ord ('0'))
          else
               c  :=  chr (remainder + ord ('A') - 10);
          result  :=  c + result;
     end;
     DecToR  :=  result
end;

Функция перевода числа из R-ричной системы счисления в 10-чную:

function RtoDec (s: string; R: word): longint;
var
     res, i, n, z: integer;
begin
     res := 0;
     z := 1;
     for i := length (s) downto 1 do
     begin
          s[i] := UpCase (s[i]));
          if s[i] in ['0'..'9'] then
               n := ord (s[i]) - ord ('0');
          if s[i] in ['A'..'Z'] then
               n := 10 + ord (s[i] - ord ('A');
          inc (res, n*z); { m := m + n * z^R}
          z := z * R;
     end;
     RtoDec := res;
end;