Перевод чисел из одной системы счисления в другую
Данный конвертер переводит числа между наиболее популярными системами счисления: десятичной, двоичной, восьмеричной, шестнадцатеричной.
Существуют и другие системы счисления, но мы не стали включать их в конвертер из-за низкой популярности.
Для указания системы счисления при записи числа используется нижний индекс, который ставится после числа:
20010 = 110010002 = 3108 = C816
Кратко об основных системах счисления
Десятичная система счисления. Используется в повседневной жизни и является самой распространенной. Все числа, которые нас окружают представлены в этой системе. В каждом разряде такого числа может использоваться только одна цифра от 0 до 9.
Двоичная система счисления. Используется в вычислительной технике. Для записи числа используются цифры 0 и 1.
Восьмеричная система счисления. Также иногда применяется в цифровой технике. Для записи числа используются цифры от 0 до 7.
Перевод в десятичную систему счисления
Перевод из десятичной системы счисления в другие
Делим десятичное число на основание системы, в которую хотим перевести и записываем остатки от деления. Запишем полученные остатки в обратном порядке и получим искомое число.
Переведем число 37510 в восьмеричную систему:
Перевод из двоичной системы в восьмеричную
Так же как и в первом способе разбиваем число на группы. Но вместо преобразований в скобках просто заменим полученные группы (триады) на соответствующие цифры восьмеричной системы, используя таблицу триад:
Перевод из двоичной системы в шестнадцатеричную
Также как и в первом способе разбиваем число на группы по 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 разрядов, тогда дополняем нулями. Записываем все группы по порядку, отбрасываем ведущие нули, если имеются, и получаем двоичное число.
Используем таблицу триад:
Каждую цифру исходного восьмеричного числа заменяется на соответствующие триады. Ведущие нули самой первой триады отбрасываются.
Перевод из шестнадцатеричной системы в двоичную
Аналогично переводу из восьмеричной в двоичную, только группы по 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 |
Каждую цифру исходного числа заменяется на соответствующие тетрады. Ведущие нули самой первой тетрады отбрасываются.
Перевод из восьмеричной системы в шестнадцатеричную и наоборот
Такую конвертацию можно осуществить через промежуточное десятичное или двоичное число. То есть исходное число сначала перевести в десятичное (или двоичное), и затем полученный результат перевести в конечную систему счисления.
Перевод отрицательных чисел в шестнадцатеричную систему
Народ, помогите!
Как преобразуются отрицательные целые в 16-ричную систему счисления!
Модератору: Пожалуйста, не удаляйте мой вопрос хотя бы пару часов!
Спасибо.
| От: | sercher |
Дата: | 15.08.03 10:59 | |
Оценка: |
-1 (10) = FF(16)
| От: | veronika |
Дата: | 15.08.03 11:02 | |
Оценка: |
Здравствуйте, veronika, Вы писали:
V>Народ, помогите!
V>Как преобразуются отрицательные целые в 16-ричную систему счисления!
V>Модератору: Пожалуйста, не удаляйте мой вопрос хотя бы пару часов!
V>Спасибо.
Как в HEX — я уже нашла, а вот как обратно из такого HEX получить правильное отрицательное число? При обратном преобразовании получается очень большое положительное
.
| От: | sercher |
Дата: | 15.08.03 11:09 | |
Оценка: |
| От: | Кодт |
Дата: | 15.08.03 11:12 | |
Оценка: |
Здравствуйте, veronika, Вы писали:
V>Как преобразуются отрицательные целые в 16-ричную систему счисления!
Легко.
* диагностируем знак числа
* берем абсолютное значение
* приводим его к шестнадцатиричному виду.
V>Модератору: Пожалуйста, не удаляйте мой вопрос хотя бы пару часов!
А что, вопрос вполне в тему.
| От: | Павел Кузнецов |
Дата: | 15.08.03 11:14 | |
Оценка: |
Здравствуйте, veronika, Вы писали:
V>Модератору: Пожалуйста, не удаляйте мой вопрос хотя бы пару часов!
| От: | Кодт |
Дата: | 15.08.03 11:16 | |
Оценка: |
Здравствуйте, veronika, Вы писали:
VV>Как в HEX — я уже нашла, а вот как обратно из такого HEX получить правильное отрицательное число? При обратном преобразовании получается очень большое положительное
.
Во-вторых, если у тебя строка вида [+/-]hhhhhhhh то распарсить ее легче легкого. Смотрим в сторону strtol().
| От: | veronika |
Дата: | 15.08.03 11:18 | |
Оценка: |
Здравствуйте, sercher, Вы писали:
Большое спасибо!!
Еще вопрос: если я не знаю заранее отрицательное или положительное HEX-число я получила, как мне определить, что получено отрицательное?
| От: | Кодт |
Дата: | 15.08.03 11:22 | |
Оценка: |
Здравствуйте, sercher, Вы писали:
S> Тоже самое:
S> N = Not N + 1
Это — способ найти (-N) в дополнительном коде.
При чем же здесь HEX?
Ведь те же самые слова относятся и к двоичной, и (о ужас) десятичной записи.
| От: | Анатолий Широков |
Дата: | 15.08.03 11:22 | |
Оценка: |
Здравствуйте, veronika, Вы писали:
V>Народ, помогите!
V>Как преобразуются отрицательные целые в 16-ричную систему счисления!
V>Модератору: Пожалуйста, не удаляйте мой вопрос хотя бы пару часов!
V>Спасибо.
По поводу представления:
Поэтому все очень просто:
| От: | Кодт |
Дата: | 15.08.03 11:26 | |
Оценка: |
Здравствуйте, veronika, Вы писали:
V>Еще вопрос: если я не знаю заранее отрицательное или положительное HEX-число я получила, как мне определить, что получено отрицательное?
Сравнить с нулем
А если двоичными средствами — то проверить старший бит.
Например,
| От: | Анатолий Широков |
Дата: | 15.08.03 11:29 | |
Оценка: |
V>Еще вопрос: если я не знаю заранее отрицательное или положительное HEX-число я получила, как мне определить, что получено отрицательное?
Не получиться определить, поскольку полученное hex число можно интерпретировать как целое со знаком, так и без него. Если вы полученное число будете приводить к long и int, то старший бит определит знак числа, а если к unsigned long или int — нет.
| От: | Андрей Тарасевич |
Дата: | 15.08.03 17:30 | |
Оценка: |
Здравствуйте, veronika, Вы писали:
V>Как преобразуются отрицательные целые в 16-ричную систему счисления!
Не понимаю, в чем сложность. Берешь число по модулю, переводишь в 16-ричную систему счисления, затем приписываешь спереди знак ‘-‘. Например ‘-16’ дает ‘-10h’.
| От: | Андрей Тарасевич |
Дата: | 15.08.03 17:31 | |
Оценка: |
Здравствуйте, veronika, Вы писали:
V>>Как преобразуются отрицательные целые в 16-ричную систему счисления!
V>Как в HEX — я уже нашла, а вот как обратно из такого HEX получить правильное отрицательное число? При обратном преобразовании получается очень большое положительное
.
Вопрос бессмысленен, до тех пор пока не уточнено, что имеется виду под HEX.
Системы счисления
Contents
Введение
Одно и тоже число можно записать в разных системах счисления. Например: двоичное число 10 соответствует десятичному 2.
Компьютер может оперировать только двоичными числами. Но программисту очень неудобно использовать длинные цепочки нулей и единиц, отображающих разные числовые значения. Поэтому, для написания программ был придуман другой, более компактный способ записи чисел – шестнадцатеричная система счисления.
Debug
Используя Debug можно проверить работу программы в пошаговом режиме. Это позволяет найти и исправить возможные ошибки. Данный процесс называется отладка «debugging», отсюда и произошло название программы.
Наиболее удобной средой для изучения Debug является файл-менеджер FAR. Для запуска Debug необходимо в командной строке FAR-а набрать команду «debug» и нажать [Enter]:
Для сложение и вычитание двух шестнадцатеричных чисел используем команду «H» (Hex – шестнадцатеричный), например:
Debug работает только с шестнадцатеричными числами. Некоторые операции с такими числами могут давать не совсем обычные результаты. Например, сложите 8 + 8:
Перевод шестнадцатеричных чисел в десятичную форму
dec | hex |
---|---|
0 | 0 |
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
5 | 5 |
6 | 6 |
7 | 7 |
8 | 8 |
9 | 9 |
10 | A |
11 | B |
12 | C |
13 | D |
14 | E |
15 | F |
16 | 10 |
17 | 11 |
18 | 12 |
19 | 13 |
20 | 14 |
Для перевода чисел из hex- в dec- форму используется очень простой алгоритм.
Например, переведем A7h в десятичную форму:
1 | переводим обе цифры в десятичную форму | A => 10 7 => 7 |
2 | умножаем каждое число на коэффициент, соответствующий разряду числа (весовой коэффициент) | 10 * 16 1 = 160 7 * 16 0 = 7 |
3 | складываем полученные числа | 160 + 7 = 167 |
Шестнадцатеричное число A7h соответствует десятичному числу 167.
Данный пример можно записать более компактно:
A => 10 * 16 1 = 160
7 => 7 * 16 0 = 7 перевод числа A7h в десятичную форму
A7h = 160 + 7 = 167
Примеры перевода чисел из одной системы счисления в другую:
Перевод 2E8h в десятичную форму: | Перевод AF1Ch в десятичную форму: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Весовые коэффициенты: | Перевод 3B8D2h в десятичную форму: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
FFFF | -1 |
FFFE | -2 |
FFFD | -3 |
FFFC | -4 |
FFFB | -5 |
FFFA | -6 |
FFF9 | -7 |
FFF8 | -8 |
FFF7 | -9 |
FFF6 | -A |
FFF5 | -B |
FFF4 | -C |
FFF3 | -D |
FFF2 | -E |
FFF1 | -F |
FFF0 | -10 |
Сложение чисел, больших чем 8000h дает переполнение. Такие числа ведут себя аналогично отрицательным числам:
Если в программе используются только положительные числа, то область числовых значений ограничивается диапазоном:
Если в вычислениях требуются отрицательные числа, то предыдущий диапазон смещается в отрицательную область:
Деление чисел на два типа весьма условно, и определяется в основном потребностями программиста. При этом микропроцессору совершенно безразлично, к каким типам мы относим те или иные числа.
Вычислите дополнительный код следующих чисел:
Двоичная система счисления
Микропроцессор, будучи устройством электронным, воспринимает цифры, как комбинации электрических сигналов. Например, число может быть представлено так:
При этом вероятность возникновения ошибки (например, из-за колебаний напряжения) очень велика. Наиболее надежным способом представления чисел в электронном устройстве, является двоичная система счисления:
Такая разница между уровнями сигналов (соответствующих «0» и «1») практически исключает ошибки связанные с колебаниями напряжения и другими искажениями сигнала. Кроме того, значительно упрощается компонентная база компьютера.
Таким образом, двоичная система счисления стала единым стандартом представления чисел в любом «думающем» электронном устройстве.
Двоичная система оптимальна для разработки микропроцессорных систем, но очень неудобна для написания программ. Чтобы упростить процесс общения с микропроцессором, были разработаны программы, транслирующие шестнадцатеричные числа в двоичный код, и выполняющие обратное преобразование. Одной из таких программ является Debug.
Для вывода на экран чисел в шестнадцатеричном формате, Debug использует небольшую подпрограмму, которая переводит двоичные числа (обрабатываемые микропроцессором), в шестнадцатеричную форму.
Рассмотрим число 1101b. Все разряды числа характеризуются весовыми коэффициентами, которые получаются возведением основания системы счисления (два) в степень, соответствующую номеру разряда. Нумерация разрядов начинается с нуля.
Номера разрядов | 3 | 2 | 1 | 0 |
---|---|---|---|---|
Весовые коэффициенты | 2 3 | 2 2 | 2 1 | 2 0 |
Число | 1 | 1 | 0 | 1 |
Перевод числа 11010010b в десятичную форму:
2 7 | 2 6 | 2 5 | 2 4 | 2 3 | 2 2 | 2 1 | 2 0 |
1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 |
2 7 + 2 6 + 2 4 + 2 1 = 210 |
Переведите следующие двоичные числа в десятичный формат:
По размеру двоичные числа делятся на следующие:
Графически это разделение можно показать так:
bin | hex | dec |
---|---|---|
0000 | 0 | 0 |
0001 | 1 | 1 |
0010 | 2 | 2 |
0011 | 3 | 3 |
0100 | 4 | 4 |
0101 | 5 | 5 |
0110 | 6 | 6 |
0111 | 7 | 7 |
1000 | 8 | 8 |
1001 | 9 | 9 |
1010 | A | 10 |
1011 | B | 11 |
1100 | C | 12 |
1101 | D | 13 |
1110 | E | 14 |
1111 | F | 15 |
Рассмотрим таблицу, в которой отражено соответствие двоичных, шестнадцатеричных и десятичных чисел.
Из таблицы видно, что двоичная и шестнадцатеричная системы кратны между собой. Данную пропорциональность в размерности чисел можно сформулировать так:
Благодаря кратности, преобразования чисел из двоичной системы в шестнадцатеричную, выполняются очень просто. Двоичное число разбивается на декады (четырехбитные фрагметны):
Каждая декада переводится в шестнадцатеричный формат, аналогично преобразованию чисел из двоичной системы счисления в десятичную:
Переведите следующие числа в шестнадцатеричную форму:
Арифметические действия с двоичными числами выполняются аналогично действиям с десятичными числами. Например, сложение одноразрядных двоичных чисел выглядит так:
Сложение четырехразрядных и восьмиразрядных двоичных чисел:
Выполните следующие действия:
(проверку результатов выполните в шестнадцатеричной системе счисления)
Дополнительный код
0000 0000 0000 0000 | 0000h |
. | . |
0111 1111 1111 1111 | 7FFFh |
1000 0000 0000 0000 | 8000h |
. | . |
1111 1111 1111 1111 | FFFFh |
Числа, в которых старший бит используется для хранения знака, известны как двоичное дополнение положительных чисел или дополнительный код.
Ранее мы находили дополнительный код шестнадцатеричных чисел (вспомните инверсию шестнадцатеричного числа с добавлением единицы). Дополнительный код двоичного числа определяется аналогично. Например, найдем дополнительный код числа 1101011010001001: