Системы счисления: как перевести из 2 в 16
Возникли какие-то трудности и недопонимания с преобразованием чисел из двоичной в шестнадцатеричную систему счисления? Записывайтесь ко мне на индивидуальные уроки по информатике и ИКТ. На своих частных уроках мы с учениками разбираем не только теоретическую часть, но также решаем колоссальное количество различных тематических упражнений.
Нужно знать, что такое двоичная или бинарная система счисления
Прежде чем размышлять о том, как перевести число из 2 в 16, необходимо хорошо понимать, что собою представляют числа в двоичной системе счисления. Напомню, что алфавит бинарной системы счисления состоит из двух допустимых элементов – 0 и 1. Это означает, что абсолютно любое число, записанное в двоичном виде, будет состоять из набора нулей и единиц. Вот примеры чисел, записанных в бинарном представлении: 10010, 100, 111101010110, 1000001.
Нужно знать, что такое шестнадцатеричная система счисления
С бинарной системой мы разобрались, вспомнили базовые моменты, сейчас поговорим о 16-ричной системе. Алфавит 16-ричной системы счисления состоит из шестнадцати различных знаков: 10 арабских цифр (от 0 до 9) и 6 первых заглавных латинских букв (от ‘А’ до ‘F’). Это означает, что абсолютно любое число, записанное в шестнадцатеричном виде, будет состоять из знаков вышеприведенного алфавита. Вот примеры чисел, записанных в 16-ричном представлении:
810A | FCDF | 198303 | 100FFF0 |
Поговорим об алгоритме преобразования числа из 2-ной в 16-ричную систему счисления
Нам потребуется в обязательном порядке рассмотреть кодировочную таблицу Тетрад. Без применения данной таблицы будет довольно затруднительно оперативно осуществлять перевод чисел из 2 в 16 систему.
Назначение кодировочной таблицы Тетрад: однозначно сопоставить символы двоичной системы счисления и 16-ричной системы счисления.
Таблица Тетрад имеет следующую структуру:
Таблица Тетрад
0000 — 0
0001 — 1
0010 — 2
0011 — 3
0100 — 4
0101 — 5
0110 — 6
0111 — 7
1000 — 8
1001 — 9
1010 — A
1011 — B
1100 — C
1101 — D
1110 — E
1111 — F
Допустим нам требуется преобразовать число 1010111110010102 в 16-ричную систему. В первую очередь необходимо исходный бинарный код разбить на группы по четыре разряда, причем, что очень важно, разбиение в обязательном порядке следует начинать справа налево.
101 . 0111 . 1100 . 1010
После разбиения мы получили четыре группы: 101, 0111, 1100 и 1010. Особого внимания требует самый левый сегмент, то есть сегмент 101. Как видно, его длина составляет 3 разряда, а необходимо, чтобы его длина равнялась четырем, следовательно, дополним данный сегмент ведущим незначащим нулем:
101 -> 0 101.
Вы скажите, а собственно на каком основании мы дописываем слева от числа какой-то 0? Все дело в том, что добавление незначащих нулей не оказывает никакого влияния на значение исходного числа. Следовательно, мы имеем полное право дописать слева от бинарного числа не только один ноль, а в принципе любое количество нулей и получить число нужной длины.
На заключительном этапе преобразования необходимо каждую из полученных бинарных групп перевести в соответствующее значение по кодировочной таблице Тетрад.
0101 -> 5 | 0111 -> 7 | 1100 -> C | 1010 -> A |
А сейчас я вам предлагаю ознакомиться с мультимединым решением, в котором показано как неравномерный код преобразуется из бинарного состояния в 16-ричное состояние:
Краткие выводы
В данной небольшой статье мы разобрали тему «Системы счисления: как перевести из 2 в 16». Если у вас остались какие-либо вопросы, недопонимания, то звоните и записывайтесь на мои индивидуальные уроки по информатике и программированию. Я предложу вам решить не один десяток подобных упражнений и у вас не останется ни одного вопроса. Вообще, системы счисления – чрезвычайно важная тема, которая образует фундамент, используемый на протяжении всего курса информатики.
Перевод систем счисления int в int из 2 в 16 -ричную
if(str_mat.toInt(nullptr,16) == 0x5A) вы тут пытаетесь перевести из 16 ричной системы строку str_mat = «01011010», т.е. в 16 ричной системе счисления число 01011010 это совсем другое число что в двоичной
20 сен 2018 в 9:24
Существует много алгоритмов, есть два способа. 1)делить на 16 и остаток от деления превращать в цифру. 2) Учитывая что байт содержит всегда две цифры HiLo, то Hi=(bt >> 4) а Lo=(bt & 15) . Ну и. можно просто воспользоваться библиотечными ф-циями.
20 сен 2018 в 9:24
Мне кажется вы немножко не поняли как работает toInt . В пример 255 превратится в 597 всё правильно — 0x255 это 597. То есть toInt берёт строку, и пытается её интерпретировать как запись в некоторой системе счисления, то есть для строки 255 при интерпретировании как 16-ричной системы получим 597, а как 8-ричной — 173
20 сен 2018 в 9:29
я прекрасно понимаю о чём вы говорите, но я не знаю как это исправить, какой код мне написать .
20 сен 2018 в 9:34
@timob256 Вам ниже в ответе рассказали про QString::number и даже примеры привели в комментарии. Это то что вам нужно.
20 сен 2018 в 9:44
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Вы нигде не переводите в десятичную систему.
int a = 10;
здесь 10 хоть и записано в десятичной системе, но компилятор сам его приведет в удобную ему систему (в нашем случае это скорее всего двоичная).
int x = 0x10;
а здесь записано шестнадцатеричное число, но все равно, в x будет записано в машинноудобном формате.
Поэтому, гда Вы пишете
int str_mit = str_mat.toInt(nullptr,2);
то переводите не в десятичную, а с двоичной в удобную компилятору/процессору систему (а то, что она двоичная, какая разница. Вполне могла быть и троичной или любой другой).
А с этой формы можно перевести в любую другую удобную для отображения, например 16-ричную
QString s = QString::number(str_mit, 16);
Заметьте, переводим в строку — так как строка может хранить «отображение».
Но если это сложно понять, тогда вот упрощенный код
QString n2m(QString origin, int from, int to)
и соответственно 10->16
Системы счисления. Правила перевода из 2-й в 8-ую и 16-ричную СС и наоборот
В презентации даны правила перевода целых и дробных чисел из 2-й в 8-ю и 16-ю СС и наоборот. Разобраны примеры, есть задания для закрепления с решением и карточки двух вариантов самостоятельной работы.
Загородняя Татьяна Анатольевна
Описание разработки
Перевод чисел внутри родственных систем (в частности, с основанием 2, 8 и 16) упрощен, поскольку все цифры алфавита для систем с большим основанием можно представить совокупностью цифр системы с наименьшим основанием.
Правило Чтобы перевести целое двоичное число в восьмеричную (8=23) систему счисления необходимо:
- разбить данное число справа налево на группы по 3 цифры в каждой;
- рассмотреть каждую группу и записать ее соответствующей цифрой восьмеричной системы счисления.
Перевести из 2 → 8
Правило Чтобы перевести целое двоичное число в 16-ричную (16=24) систему счисления необходимо:
- разбить данное число справа налево на группы по 4 цифры в каждой;
- рассмотреть каждую группу и записать ее соответствующей цифрой 16-ричной системы счисления.
Перевести из 2 → 16
Правило Чтобы перевести дробное двоичное число в восьмеричную (шестнадцатеричную) систему счисления необходимо:
- разбить данное число, начиная от запятой влево целую часть и вправо дробную часть на группы по 3 (4) цифры в каждой;
- рассмотреть каждую группу и записать ее соответствующей цифрой восьмеричной (шестнадцатеричной) системы счисления.
Содержимое разработки
Перевод чисел из двоичной системы счисления в восьмеричную и шестнадцатеричную системы счисления и наоборот
Перевод чисел внутри родственных систем (в частности, с основанием 2, 8 и 16) упрощен, поскольку все цифры алфавита для систем с большим основанием можно представить совокупностью цифр системы с наименьшим основанием:
Основание системы счисления
Десятеричная
Восьмеричная
Шестнадцатеричная
Перевод целых чисел.
- Правило Чтобы перевести целое двоичное число в восьмеричную (8=2 3 ) систему счисления необходимо:
- • разбить данное число справа налево на группы по 3 цифры в каждой;
- • рассмотреть каждую группу и записать ее соответствующей цифрой восьмеричной системы счисления.
- Перевести из 2 → 8
- 10110110
- 100011001
- 1110111
- Перевести из 2 → 8
- 10110110 2 =266
- 100011001 2 =431 8
- 1110111 2 =167 8
- Правило Чтобы перевести целое двоичное число в 16-ричную (16=2 4 ) систему счисления необходимо:
- • разбить данное число справа налево на группы по 4 цифры в каждой;
- • рассмотреть каждую группу и записать ее соответствующей цифрой 16-ричной системы счисления.
- Перевести из 2 → 16
- 10110110
- 100011001
- 1110111
- Перевести из 2 → 8 → 16
- 10110110 2 = 266 8 =В6 16
- 100011001 2 =431 8 = 119 16
- 1110111 2 =167 8 =77 16
Перевод дробных чисел
- ПравилоЧтобы перевести дробное двоичное число в восьмеричную (шестнадцатеричную) систему счисления необходимо:
- • разбить данное число, начиная от запятой влево целую часть и вправо дробную часть на группы по 3 (4) цифры в каждой;
- • рассмотреть каждую группу и записать ее соответствующей цифрой восьмеричной (шестнадцатеричной) системы счисления.
Перевод чисел из восьмеричной и шестнадцатеричной систем счисления в двоичную систему счисления.
- Правило
- Для того, чтобы восьмеричное (шестнадцатеричное) число перевести в двоичную систему счисления, необходимо каждую цифру этого числа заменить соответствующим числом, состоящим из 3 (4) цифр двоичной системы счисления.
Найдите где нужно поставить запятую
Перевести в 2-ю систему счисления
- 427 8 =
- 216 8 =
- 1072 8 =
- 427 16 =
- А41 16 =
- 1С4В 16 =
Перевести в 2-ю систему счисления
- 427 8 =100010111 2
- 216 8 =10001110 2
- 1072 8 =1000111010 2
- 427 16 =10000100111 2
- А41 16 =101001000001 2
- 1С4В 16 =110001001011 2
Проверочная работа Перевести числа в соответствующие СС. 1 вариант 2 вариант
Перевод чисел в шестнадцатеричную систему счисления
Решение получаем через калькулятор. Переводим целую часть числа ( 56 ).
Остаток от деления записываем в обратном порядке. Получаем число в 16-ой системе счисления: 038
56 = 03816
Для перевода дробной части числа последовательно умножаем дробную часть на основание 16. В результате каждый раз записываем целую часть произведения.
0.567*16 = 9.072 (целая часть 9 )
0.072*16 = 1.152 (целая часть 1 )
0.152*16 = 2.432 (целая часть 2 )
0.432*16 = 6.912 (целая часть 6 )
Получаем число в 16-ой системе счисления: 9126
0.567 = 912616
Таким образом, число 56,567 в шестнадцатеричной системе счисления записывается как 38,9126.
Пример 2 . Перевести число 0101110,011 в шестнадцатеричное представление.
Переводим целую часть числа. Для этого разделим исходный код на группы по 4 разряда.
01011102 = 0010 1110 2
Затем заменяем каждую группу на код из таблицы.
Двоичная СС | Шестнадцатеричная СС |
0000 | 0 |
0001 | 1 |
0010 | 2 |
0011 | 3 |
0100 | 4 |
0101 | 5 |
0110 | 6 |
0111 | 7 |
1000 | 8 |
1001 | 9 |
1010 | A |
1011 | B |
1100 | C |
1101 | D |
1110 | E |
1111 | F |
Получаем число: 0010 1110 2 = 2E16
Переводим дробную часть числа. Для этого разделим исходный код на группы по 4 разряда.
0112 = 01102
Затем заменяем каждую группу на код из таблицы.
Получаем число: 01102 = 616
Пример 3 . Перевести число 456,548 в шестнадцатеричное представление.
Переводим целую часть числа. Заменяем каждый разряд на код из таблицы.
Двоичная СС | Восьмеричная СС |
000 | 0 |
001 | 1 |
010 | 2 |
011 | 3 |
100 | 4 |
101 | 5 |
110 | 6 |
111 | 7 |
Получаем число: 4568 = 1001011102
Переводим дробную часть числа.
Получаем число: 548 = 1011002
Переводим целую часть числа. Для этого разделим исходный код на группы по 4 разряда.
1001011102 = 0001 0010 1110 2
Затем заменяем каждую группу на код из таблицы.
Получаем число: 0001 0010 1110 2 = 12E16
Переводим дробную часть числа. Для этого разделим исходный код на группы по 4 разряда.
1011002 = 1011 00002
Затем заменяем каждую группу на код из таблицы.
Получаем число: 1011 00002 = B016