Четверг, 09.01.2025, 12:09
Главная Регистрация RSS поиск
Приветствую Вас, Гость
Меню сайта
Категории раздела
HTML [44]
Visual C++ и MFC [21]
c++ [78]
php [19]
Javascript [15]
C# [51]
загрузки [0]
XNA [10]
создание игр с помощью xna
Наш опрос
Каким языком программирования вы увлекаетесь
Всего ответов: 2420
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Реклама
Главная » Статьи » c++

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

Краткие сведения из курса двоичной арифметики

Как вам должно быть известно, человечество для своих целей в основном использует 10-ую систему счисления, которая содержит 10 цифр (0-9), а число 10 называется основанием системы счисления. Наша система счисления - позиционная, то есть число зависит от позиций содержащихся в нем цифр (пример непозиционной системы счисления - римская). Рассмотрим число 12345.

1234510 = 1 * 104 + 2 * 103 + 3 * 102 + 4 * 101 + 5 * 100

Следовательно, любое 10-ое число можно разложить на составляющие. Для этого достаточно сложить произведения всех цифр на 10 (основание системы счисления) в степени позиции цифры в числе, где позиции отсчитываются от 0 справа налево. Данное правило справедливо для любой позиционной системы счисления.

К данному моменту вам должно быть также известно, что компьютер оперирует 2-ой системой счисления, содержащей 2 цифры 0 и 1. К этой системе счисления (она таки позиционная) применимо описанное выше правило. Например,

1010102 = 1 * 25 + 0 * 24 + 1 * 23 + 0 * 22 + 1 * 21 + 0 * 20 = 4210

Но для человека оперировать 2-ой системой счисления неудобно, так как она слишком громоздкая. Поэтому в программировании чаще всего используется более компактная система счисления по основанию 16 (реже используется система счисления по основанию 8). 16-ая система счисления содержит 10 цифр (0-9) и 6 чисел, которые кодируются буквами латинского алфавита (A-F). Для хранения 16-ой цифры требуется log216 = 4 двоичных разряда (для 8-ой системы счисления, соответственно, 3 разряда).

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

2-ая СС 10-ая СС 16-ая СС 2-ая СС 10-ая СС 16-ая СС
0000 0 0 1000 8 8
0001 1 1 1001 9 9
0010 2 2 1010 10 A
0011 3 3 1011 11 B
0100 4 4 1100 12 C
0101 5 5 1101 13 D
0110 6 6 1110 14 E
0111 7 7 1111 15 F

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

Частный случай - системы счисления по основанию степени двойки

Системы счисления, основание которых является степенью двойки (4-ая, 8-ая, 16-ая и т. д.), легко преобразуются одна в другую через двоичную систему счисления.

Пример перевода числа из 2-ой СС в 16-ую СС. Для перевода необходимо брать по 4 разряда числа, отсчитывая справа налево, и кодировать их 16-ой цифрой. В случае если разрядов не хватает, перед числом дописывают нули.

101001011012 = 0101 0010 11012 = 52D16

Пример перевода числа из 2-ой СС в 8-ую СС. Для перевода необходимо брать по 3 разряда числа, отсчитывая справа налево, и кодировать их 8-ой цифрой. В случае если разрядов не хватает, перед числом дописывают нули.

101001011012 = 010 100 101 1012 = 24558

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

1AC416 = 0001 1010 1100 01002 = 11010110001002

Общий случай - системы счисления по любому основанию

Для перевода числа из любой СС в 10-ую есть два способа. Пусть B - основание СС, d - цифра числа, X - число, n - количество цифр в числе.

Математический способ:

X10 = d1 * Bn-1 + d2 * Bn-2 + ... + dn

1AC416 = 1 * 163 + 10 * 162 + 12 * 161 + 4 * 160 = 685210

Итерационный способ:

X10 = ((d1 * B + d2) * B + d3) * B + ... + dn

1AC416 = ((1 * 16 + 10) * 16 + 12) * 16 + 4 = 685210

Для перевода из 10-ой СС в любую другую можно предложить следующий алгоритм:

  1. Делим 10-ое число X на B (основание СС, в которую осуществляется перевод) нацело. Получаем новое число X и остаток P. Запоминаем остаток.
  2. Продолжаем выполнение шага 1 до тех пор пока число X != 0.
  3. Собираем запомненные остатки в обратном порядке и получаем число X в системе счисления B.

Пример:

12345      16
12336      771      16
9      768      48      16
3      48      3      16
0      0      0
3     

1234510 = 303916

Примечание: При переводе в 2-ую СС из 10-ой рациональнее будет перевести число в 16-ую СС (меньше операций деления), а затем из 16-ой СС перевести в 2-ую с помощью ранее описанного способа. 

Категория: c++ | Добавил: slava (30.05.2011)
Просмотров: 13288 | Рейтинг: 5.0/2
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]