Как перевести отрицательное число в шестнадцатеричную систему
Перейти к содержимому

Как перевести отрицательное число в шестнадцатеричную систему

  • автор:

home » Перевод чисел из десятичной системы в шестнадцатиричную

Двоичная система счисления — позиционная система счисления с основанием 2.

Шестнадцатеричная система счисления — позиционная система счисления по целочисленному основанию 16.

Десятичное число (положительное) Шестнадцатеричное число
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
32 20
64 40
128 80
256 100

Вывод целого отрицательного числа в шестнадцатеричной системе счисления

Как вывести дополнительный код hex целого отрицательного числа, вводимого в десятеричной системе счисления?

Отслеживать
задан 10 мар 2017 в 21:31
kall_lightman kall_lightman
45 1 1 серебряный знак 8 8 бронзовых знаков

Что именно вводится-то? Положительное число, дополнительный код отрицания которого надо построить? Отрицательное число? Если отрицательное число, то в каком коде оно внутренне представлено?

10 мар 2017 в 22:28
Вводится число -113, на экран должно выводится его дополнительный код в hex
12 мар 2017 в 15:26

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Если число вводится именно как отрицательное, то его представление в дополнительно коде совпадает с представлением этого же числа, приведенного к беззнаковому целому типу того же размера (при этом старший бит беззнакового представления соответствует знаковому биту знакового представления)

#include #include int main() < int i; std::cin >> i; std::make_unsigned_t u = i; std::cout

Однако спецификация поведения std::hex в данном контексте и так гарантирует (гарантирует ли?), что выводимое значение будет внутренне приведено к соответствующему беззнаковому типу, поэтому можно просто

 int i; std::cin >> i; std::cout  

(Эта часть вызывает у меня определенные сомнения. Лучше все-таки предварительно привести самостоятельно.)

Если же задача подразумевает, что надо сформировать представление в дополнительном коде числа -n для некоего вводимого положительного числа n , то делается это путем инверсии всех битов числа с последующим инкрементом результата

 unsigned u; cin >> u; unsigned u2 = ~u + 1; std::cout  

Существуют ли в 16ричной системе отрицательные числа?

Конечно! Они записываются также, как положительные, только со знаком минус, как и десятичные.
А вот если надо в компьютере записать отрицательное число, то это будет противоположное ему положительное в дополнительном коде.
Чтобы перевести число в доп код, надо его перевести в двоичное, проинвертировать и прибавить 1.
Потом перевести обратно в 16-ричное.
Например, нам надо написать число -1 в однобайтовом 16-ричном виде.
1 = 00000001, инверсия ~1 = 11111110, доп код ~1+1 = 11111111 = FF
-1 = FF, если число однобайтовое или FFFF, если двухбайтовое.

Остальные ответы

Как выполнить перевод 8-ми битного отрицательного числа из десятичной системы счисления в шестнадцатиричную?

mayton2019

Вот из википедии. Как из положительного сделать отрицательное в формате ДК (дополнительный код).

int twos_compl_abs(int a)

Инвертируем и добавляем единичку.

Для числа -100. Берем сначала по модулю. 100 - это 64 + 32 + 4

В хекс-системе тоже число будет

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *