Используем соотношение 16 = 2⁴, которое позволяет кодировать каждую шестнадцатиричную цифру четырьмя двоичными разрядами (тетрадой). Можно легко составить таблицу: 0 - 0000 1 - 0001 2 - 0010 3 - 0011 4 - 0100 5 - 0101 6 - 0110 7 - 0111 8 - 1000 9 - 1001 А - 1010 B - 1011 C - 1100 D - 1101 E - 1110 F - 1111 Теперь легко сформулировать правило перевода "16⇒2": каждую шестнадцатиричную цифру заменить четырьмя двоичными. Левые (незначащие) нули можно отбросить. Пример: 162С₁₆ = 0001 0110 0010 1100₂ = 1011000101100₂
Обратный перевод ("2⇒16") делается так же несложно. Нужно разбить двоичное число на тетрады, производя это разбиение, в общем случае, влево и вправо от десятичной точки и затем каждую тетраду заменить шестнадцатиричной цифрой. Если самая левая тетрада неполная, её слева дополнить нулями. Если самая правая после точки тетрада неполная, её дополнить справа нулями. Пример: 110011011.0110100101₂ = 1 1001 1011.0110 1001 01₂ = 0001 1001 1011.0110 1001 0100₂ = 19B.694₁₆
Текст программы (Pascal) var a,b,c,d,e:byte; k:integer; begin k:=0; for a:=1 to 9 do begin for b:=0 to 9 do if b<>a then begin for c:=0 to 9 do if (c<>a) and (c<>b) then begin for d:=0 to 9 do if (d<>a) and (d<>b) and (d<>c) then begin e:=0; repeat if a*c-c*e=a-b+c+d+e then Inc(k); e:=e+2 until e<9 end end end end; Writeln(k) end.
Можно легко составить таблицу:
0 - 0000
1 - 0001
2 - 0010
3 - 0011
4 - 0100
5 - 0101
6 - 0110
7 - 0111
8 - 1000
9 - 1001
А - 1010
B - 1011
C - 1100
D - 1101
E - 1110
F - 1111
Теперь легко сформулировать правило перевода "16⇒2":
каждую шестнадцатиричную цифру заменить четырьмя двоичными.
Левые (незначащие) нули можно отбросить.
Пример: 162С₁₆ = 0001 0110 0010 1100₂ = 1011000101100₂
Обратный перевод ("2⇒16") делается так же несложно. Нужно разбить двоичное число на тетрады, производя это разбиение, в общем случае, влево и вправо от десятичной точки и затем каждую тетраду заменить шестнадцатиричной цифрой. Если самая левая тетрада неполная, её слева дополнить нулями. Если самая правая после точки тетрада неполная, её дополнить справа нулями.
Пример: 110011011.0110100101₂ = 1 1001 1011.0110 1001 01₂ =
0001 1001 1011.0110 1001 0100₂ = 19B.694₁₆