Урок 32. Перевод чисел между системами счисления
При программировании мы часто сталкиваемся с необходимостью перевода чисел между системами счисления, по основанию: 2, 4, 8, 16 и 10.
Основание системы счисления указывает какое количество цифр используется в этой системе для написания чисел:
- Привычная нам система счисления по основанию 10 (десятичная система счисления) использует 10 цифр: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. После 9 идёт не цифра, а число 10, состоящее из двух цифр: 1 и 0. Таким образом, мы записываем любые числа, используя указанные цифры в определённой последовательности.
- Система счисления по основанию 2 (двоичная система счисления) использует 2 цифры: 0, 1.
- Система счисления по основанию 4 (четверичная система счисления) использует 4 цифры: 0, 1, 2, 3.
- Система счисления по основанию 8 (восьмеричная система счисления) использует 8 цифр: 0, 1, 2, 3, 4, 5, 6, 7.
- Система счисления по основанию 16 (шестнадцатеричная система счисления) использует 16 цифр: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. В данном случае, буквы ABCDEF являются цифрами. Цифра A шестнадцатеричной системы, равна числу 10 десятичной системы, цифра B равна числу 11 десятичной системы, . , цифра F равна числу 15 десятичной системы.
Можно использовать любую систему счисления, например по основанию 12 (счет дюжинами), но наиболее популярными при программировании, являются: десятичная, шестнадцатеричная и двоичная, системы счисления.
Все выше перечисленные системы счисления относятся к позиционным системам. Значение числа зависит не только от того из каких цифр оно состоит, но и в какой последовательности они записаны. Например число 1234 не равно числу 4321.
Методы представления чисел в разных системах счисления:
- двоичная система счисления:
- (10101)2 — математическое представление (число)основание системы
- 0b10101 — представление в скетчах Arduino IDE (число записывается с ведущими символами «0b»).
- B10101 — представление в скетчах Arduino IDE (число до 256 записывается с ведущим символом «B»).
- (10101)8 — математическое представление (число)основание системы
- 010101 — представление в скетчах Arduino IDE (число записывается с ведущим символом «0» ноль).
- (10101)10 — математическое представление (число)основание системы
- 10101 — представление в скетчах Arduino IDE (число записывается как есть без ведущих символов)
- (10101)16 — математическое представление (число)основание системы
- 0x10101 — представление в скетчах Arduino IDE (число записывается с ведущими символами «0x»).
Перевод чисел в десятичную систему счисления:
Для перевода числа из любой системы счисления в десятичную нужно сложить все цифры этого числа, предварительно умножив каждое из них на основание системы счисления, из которой производится перевод, возведя её в степень соответствующую позиции цифры в числе:
Σ(цифра_числа * основание_системы позиция_цифры )
Примеры перевода чисел в десятичную систему счисления:
- (101011)2 = 1*2 5 + 0*2 4 + 1*2 3 + 0*2 2 + 1*2 1 + 1*2 0 = 32+0+8+0+2+1 = (43)10.
- (1357)8 = 1*8 3 + 3*8 2 + 5*8 1 + 7*8 0 = 512+192+40+7 = (751)10.
- (3BC9)16 = 3*16 3 + B*16 2 + C*16 1 + 9*16 0 = 3*16 3 + 11*16 2 + 12*16 1 + 9*16 0 = 12288+2816+192+9 = (15305)10.
Перевод чисел из десятичной системы счисления:
Для перевода чисел из десятичной системы счисления в любую другую, необходимо целочисленно делить переводимое число на основание той системы, в которую мы хотим его перевести, до тех пор пока результат целочисленного деления не станет равен 0. Результатом перевода будут цифры остатка от каждого деления, в обратном порядке.
Примеры перевода чисел из десятичной системы счисления:
- (43)10 перевести в двоичную систему счисления:
- 43/2 = 21 и 1 в остатке
- 21/2 = 10 и 1 в остатке
- 10/2 = 5 и 0 в остатке
- 5/2 = 2 и 1 в остатке
- 2/2 = 1 и 0 в остатке
- 1/2 = 0 и 1 в остатке
- результат — цифры остатков в обратном порядке = (101011)2
- 751/8 = 93 и 7 в остатке
- 93/8 = 11 и 5 в остатке
- 11/8 = 1 и 3 в остатке
- 1/8 = 0 и 1 в остатке
- результат — цифры остатков в обратном порядке = (1357)8
- 15305/16 = 956 и 9 в остатке
- 956/16 = 59 и 12 в остатке — соответствует цифре (C)16
- 59/16 = 3 и 11 в остатке — соответствует цифре (B)16
- 3/16 = 0 и 3 в остатке
- результат — цифры остатков в обратном порядке = (3BC9)16
Простой метод перевода:
Легче всего переводить числа через двоичную систему счисления. О том как это сделать рассказано в нашем видеоуроке.
Перевод чисел из одной системы счисления в другую
Данный конвертер переводит числа между наиболее популярными системами счисления: десятичной, двоичной, восьмеричной, шестнадцатеричной.
Система счисления — это способ представления числа. Одно и то же число может быть представлено в различных видах. Например, число 200 в привычной нам десятичной системе может иметь вид 11001000 в двоичной системе, 310 в восьмеричной и C8 в шестнадцатеричной.
Существуют и другие системы счисления, но мы не стали включать их в конвертер из-за низкой популярности.
Для указания системы счисления при записи числа используется нижний индекс, который ставится после числа:
20010 = 110010002 = 3108 = C816Кратко об основных системах счисления
Десятичная система счисления. Используется в повседневной жизни и является самой распространенной. Все числа, которые нас окружают представлены в этой системе. В каждом разряде такого числа может использоваться только одна цифра от 0 до 9.
Двоичная система счисления. Используется в вычислительной технике. Для записи числа используются цифры 0 и 1.
Восьмеричная система счисления. Также иногда применяется в цифровой технике. Для записи числа используются цифры от 0 до 7.
Шестнадцатеричная система счисления. Наиболее распространена в современных компьютерах. При помощи неё, например, указывают цвет. #FF0000 — красный цвет. Для записи числа используются цифры от 0 до 9 и буквы A,B,C,D,E,F, которые соответственно обозначают числа 10,11,12,13,14,15.
Перевод в десятичную систему счисления
Преобразовать число из любой системы счисления в десятичную можно следующим образом: каждый разряд числа необходимо умножить на X n , где X — основание исходного числа, n — номер разряда. Затем суммировать полученные значения.
Перевод из десятичной системы счисления в другие
Делим десятичное число на основание системы, в которую хотим перевести и записываем остатки от деления. Запишем полученные остатки в обратном порядке и получим искомое число.
Переведем число 37510 в восьмеричную систему:
Перевод из двоичной системы в восьмеричную
Для перевода в восьмеричную систему нужно разбить двоичное число на группы по 3 цифры справа налево. В последней (самой левой) группе вместо недостающих цифр поставить слева нули. Для каждой полученной группы произвести умножение каждого разряда на 2 n , где n — номер разряда.
Так же как и в первом способе разбиваем число на группы. Но вместо преобразований в скобках просто заменим полученные группы (триады) на соответствующие цифры восьмеричной системы, используя таблицу триад:
Триада 000 001 010 011 100 101 110 111 Цифра 0 1 2 3 4 5 6 7 Перевод из двоичной системы в шестнадцатеричную
Разбиваем число на группы по 4 цифры справа налево. Последнюю (левую) группу дополним при необходимости ведущими нулями. Внутри каждой полученной группы произведем умножение каждой цифры на 2 n , где n — номер разряда, и сложим результаты.
Также как и в первом способе разбиваем число на группы по 4 цифры. Заменим полученные группы (тетрады) на соответствующие цифры шестнадцатеричной системы, используя таблицу тетрад:
Тетрада 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Цифра 0 1 2 3 4 5 6 7 8 9 A B C D E F Перевод из восьмеричной системы в двоичную
Каждый разряд восьмеричного числа будем делить на 2 и записывать остатки в обратном порядке, формируя группы по 3 разряда двоичного числа. Если в группе получилось меньше 3 разрядов, тогда дополняем нулями. Записываем все группы по порядку, отбрасываем ведущие нули, если имеются, и получаем двоичное число.
Используем таблицу триад:
Цифра 0 1 2 3 4 5 6 7 Триада 000 001 010 011 100 101 110 111 Каждую цифру исходного восьмеричного числа заменяется на соответствующие триады. Ведущие нули самой первой триады отбрасываются.
Перевод из шестнадцатеричной системы в двоичную
Аналогично переводу из восьмеричной в двоичную, только группы по 4 разряда.
Используем таблицу тетрад:
Цифра 0 1 2 3 4 5 6 7 8 9 A B C D E F Тетрада 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Каждую цифру исходного числа заменяется на соответствующие тетрады. Ведущие нули самой первой тетрады отбрасываются.
Перевод из восьмеричной системы в шестнадцатеричную и наоборот
Такую конвертацию можно осуществить через промежуточное десятичное или двоичное число. То есть исходное число сначала перевести в десятичное (или двоичное), и затем полученный результат перевести в конечную систему счисления.
Перевод чисел из любой системы счисления в десятичную.
ПравилоДля того чтобы число из любой системы счисления перевести в десятичную систему счисления, необходимо его представить в развернутом виде и произвести вычисления.
Пример1. Перевести число 1101102 из двоичной системы счисления в десятичную.
1 1 0 1 1 0 2 = 1*2 5 + 1*2 4 + 0*2 3 +1*2 2 +1*2 1 +0*2 0 =32+16+4+2=5410
Пример2. Перевести число 101,012 из двоичной системы счисления в десятичную.
1 0 1, 0 1 2 = 1*2 2 + 0*2 1 + 1*2 0 +0*2 -1 +1*2 -2 =4+0+1+0+0,25=5,2510
Пример3. Перевести число 1221003 из троичной системы счисления в десятичную.
1 2 2 0 1 3=1*3 4 + 2*3 3 + 2*3 2 + 0*3 1 + 1*3 0 = 81+54+18+1 = 15410
Пример4. Перевести число 1637 из семеричной системы счисления в десятичную.
Решение: 1637 = 1*7 2 + 6*7 1 + 3*7 0 = 49+42+3= 9410.
Пример6. Перевести число 2Е16 в десятичную систему счисления.
2 Е16 = 2*16 1 +14*16 0 = 32 +14 = 4610.
Перевод чисел из двоичной системы счисления в восьмеричную и шестнадцатеричную системы счисления.