Thursday, September 10, 2015

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

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

Целое десятичное число нужно поделить на основание новой системы счисления. Остаток от этого деления является самым младшим разрядом в новой записи числа. Результат деления вновь делится на основание. Остаток от этого деления будет следующим разрядом в новой записи числа, результат деления вновь делится на основание и т.д. до тех пор, пока в результате деления получится число, меньшее по величине, чем основание новой системы. Остаток этого последнего деления будет предпоследним разрядом в новой записи числа, а результат этого последнего деления - самым старшим разрядом в новой записи числа.

Проверка перевода осуществляется по формуле (11.2), так, как это показано ниже на примерах.

Пример. Перевести десятичное число 125 в двоичную, восьмеричную и шестнадцатеричную системы счисления. Проверить результаты по формуле (П11.2).

\arraycolsep=0.05em
\begin{array}{l@{\,}rl@{\,}rl@{\,}rl@{\,}rl@{\,}rl@{\,}rl@{\,}rl}
&_{-}125 &|2 &&&&&\\
\cline{3-4}
&124 &&_{-}62 &|2\\
\cline{2-2}\cline{5-6}
&1 & &62 &&_{-}31 &|2\\
\cline{4-4}\cline{7-8}
&&&0 & &30 &&_{-}15 &|2\\
\cline{6-6}\cline{9-10}
& &&  &&1 &&14 &&_{-}7 &|2\\
\cline{8-8}\cline{11-12}
&&&&&&&1&&6 &&_{-}3 &|2\\
\cline{10-10}\cline{13-14}
&&&&&&&&&1 &&2&&1\\
\cline{12-12}
&&&&&&&&&&&1\\
\end{array} \\

125_{10} = 1111101_2
\arraycolsep=0.05em
\begin{array}{rrrrrrrr}
_{-}&1&2&5&|8\\
 \cline{5-6}
    & &8& &_{-}&15&|8\\
\cline{2-3}\cline{7-7}
 &_{-}&4&5&    & 8& 1\\
\cline{6-6}
 &    &4&0&    & 7\\
\cline{3-4}
 &    & &5 
\end{array} \\

125_{10}=175_8
\arraycolsep=0.05em
\begin{array}{rrr}
_{-} & 125 & |16\\
 \cline{3-3}
 & 112 & 7\\
 \cline{2-2}
 & 13\\
\end{array} \\
125_{10} =  7D_{16}
a)б)в)
Проверка:
  • в двоичном коде: 1111101_{2}= 1+4+8+16+32+64=125 ;
  • в восьмеричном коде 175_{8} = 1\cdot 8^{2 }+ 7\cdot  8^{1} + 5\cdot  8^{0} = 64+56+5=125 ;
  • в шестнадцатеричном коде - 125 =  7D_{16} =    =7\cdot  16^{1} + 13\cdot  16^{0} = 112 + 13 = 125.
В рассмотренном примере при переводе вместо коэффициента используется его десятичный эквивалент в соответствии с таблицей 11.2.

Перевод из двоичной системы в шестнадцатеричную (восьмеричную)


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

Двоичная запись числа делится на группы по четыре ( три ) двоичных знака влево и вправо от запятой, отделяющей целые и дробные части Неполные крайние группы (если они есть) дополняются нулями до четырех ( трех ) знаков. Каждая группа заменяется одним шестнадцатеричным ( восьмеричным ) знаком в соответствии с кодом группы 

Таблица 11.2. Соответствие двоичных групп, шестнадцатеричных и восьмеричных знаков
Двоичная группаШестнадцатеричный знакДесятичный эквивалентДвоичная группаВосьмеричный знак
0000000000
0001110011
0010220102
0011330113
0100441004
0101551015
0110661106
0111771117
100088
100199
1010A10
1011B11
1100C12
1101D13
1110E14
1111F15
Примеры:
  • перевод в шестнадцатеричную систему:
    11110000001010,0101111_{2}=\fbox{0011} \fbox{1100} \fbox{0000} \fbox{1010} , \fbox{0101} \fbox{1110} = 3С0А, 5Е_{16};
  • перевод в восьмеричную систему:
    1100000110,10111_{2}=\fbox{001} \fbox{100 }\fbox{000}\fbox{ 110 }, \fbox{101 }\fbox{110 }= 1406, 56_{8}.

Перевод из шестнадцатеричной (восьмеричной) системы в двоичную


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

Каждая цифра (без всяких сокращений!) шестнадцатеричного ( восьмеричного ) числа заменяется одной двоичной группой из четырех ( трех ) двоичных знаков (табл. 11.2).

Примеры:
  • для шестнадцатеричного числа: 127, В6_{16 }= 000100100111,10110110_{2} = 100100111,1011011_{2} ;
  • для восьмеричного числа: 147,554_{8} = 001100111,101101100_{2 }= 1100111,1011011_{2}.

Как показано в примерах, крайние нули слева и справа при желании можно не писать, но такое сокращение делается уже после перевода в двоичную систему.