Перевод отрицательных чисел в шестнадцатеричную систему

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

Данный конвертер переводит числа между наиболее популярными системами счисления: десятичной, двоичной, восьмеричной, шестнадцатеричной.

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

Для указания системы счисления при записи числа используется нижний индекс, который ставится после числа:
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

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

2 => 2 * 16 2 = 512
E => 14 * 16 1 = 224
8 => 8 * 16 0 = 8
2E8h = 512 + 224 + 8 = 744

A => 10 * 16 3 = 40960
F => 15 * 16 2 = 3840
1 => 1 * 16 1 = 16
C => 12 * 16 0 = 12
AF1Ch = 40960 + 3840 + 16 + 12 = 44828

Переведите следующие шестнадцатеричные числа в десятичную форму:

Сложение и вычитание шестнадцатеричных чисел

Сложение и вычитание шестнадцатеричных чисел проходит аналогично действиям над десятичными числами.
Приведем несколько простых примеров:

Рассмотрим, как получается 1Eh в результате сложения F + F. Запишем результат операции в десятичном виде: F + F = 15 + 15 = 30.

Числа с большим числом разрядов можно складывать «столбиком»:

Вычислите «столбиком» следующие примеры, а результаты проверьте в Debug:

Пятизначные шестнадцатеричные числа

Что произойдет, если в сложении использовать пятизначное шестнадцатеричное число? Вычислим сумму следующих чисел:

Debug сообщил об ошибке. Команда «h» не может обрабатывать числа, длина которых больше четырех разрядов. Шестнадцатеричное число, состоящее из четырех разрядов называют так: «СЛОВО» или «WORD».

Если сложить два «слова», например C000h и D000h, то вместо действительного результата 19000h получится «урезанный» до четырех разрядов результат 9000h:

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

Подумайте, какое значение имеет старший (пятый) разряд при сложении четырехразрядных шестнадцатеричных чисел?

Перевод десятичных чисел в шестнадцатеричную форму

Перевод десятичного числа в шестнадцатеричную форму выполняется делением исходного числа на 16. Например, переведем 300 в шестнадцатеричную форму:

Примеры перевода чисел 1000 и 60000 в шестнадцатеричную форму:

Переведите следующие числа в шестнадцатеричную форму:

Отрицательные числа

Пусть так, тогда если сложить FFFFh и 5, то должно получиться 4:

Перевод 2E8h в десятичную форму: Перевод AF1Ch в десятичную форму:
Весовые коэффициенты: Перевод 3B8D2h в десятичную форму:
16 4 65535
16 3 4096
16 2 256
16 1 16
16 0 1
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:

Источник

Оцените статью
( Пока оценок нет )
Поделиться с друзьями
Uchenik.top - научные работы и подготовка
0 0 голоса
Article Rating
Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии