СообЧа > База Знаний > Программирование

Вопрос

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

Ответ

Для перевода чисел из десятичной системы исчисления в какую-либо другую используется метод деления. Допустим, у вас имеется число 173 и его необходимо перевести в двоичную систему. В данном случае модуль системы исчисления (количество цифр в обном десятке) равен 2 (для 16-ричной модуль равен 16, 8-ричной — 8). Делается это так: 173 | 1 — делим 173 на 2, получаем: 173/2 = 86, остаток 1
 86 | 0 — делим 86 на 2, получаем 86/2= 43, остаток 0
 43 | 1 — 43/2 = 21, остаток — 1
 21 | 1 — 21/2 = 10, остаток — 1
 10 | 0 — 10/2 = 5, остаток — 0
  5 | 1 — 5/2 = 2, остаток — 1
  2 | 0 — 2/2 = 1, остаток — 0
  1 | 1 — на этом вычисления заканчиваются.
Число читаем снизу вверх: 10101101

Еще для примера — представим число 2473 в 16-ричной системе исчисления:
2475 | 11(В)- 2475/16 = 154, остаток — 11
 154 | 10(А)- 154/16 = 9, остаток — 10
  9 | 9 — на этом вычисления заканчиваются.
Число читаем снизу вверх: 9АВ

В 16-ричной системе для обозначения цифр больше 9 используются первые буквы латинского алфавита: 10 16
****** 0 0
1 1
2 2
. .
. .
9 9
10 A
11 B
12 C
13 D
14 E
15 F
16 10
17 11
.. ..
.. ..

Для перевода чисел из какой-либо системы исчисления в десятичную необходимо каждую цифру числа умножить на модуль системы, возведенный в степень, равную разряду данной цифры, и затем сложить результаты. Например, переведем число 1101101101 в десятичную систему исчисления:
9 8 7 6 5 4 3 2 1 0 — разряд цифры, находящейся ниже.
1 1 0 1 1 0 1 1 0 1 — число
N = 1*2^9 + 1*2^8 + 0*2^7 + 1*2^6 + 1*2^5 + 0*2^4 + 1*2^3 + 1*2^2 + 0*2^1 + 1*2^0 = = 1*512 + 1*256 + 0*128 + 1*64 + 1*32 + 0*16 + 1*8 + 1*4 + 0*2 + 1*1 = 877.
Для 16-ричной системы необходимо было бы 2 в предыдущем выражении заменить на 16.

Алексей

Если вам лень все это делать вручную, то на моем сайте www.il-a.pochtamt.ru лежит исходник, позволяющий переводить не только целые числа (это есть почти везде), но и дробные, причем из любой _четной_ системы (<37, т.к. 26 англ. букв) в любую (напр. из 14-ричной в 36-ричную) — через двоичную.



Copyright © 2000-2004 Сообщество Чайников
Контактная информация