как преобразовать отрицательный шестнадцатеричный в десятичный

привет, я хочу знать, как можно преобразовать шестнадцатеричное отрицательное значение (в дополнение к кодировке) в десятичное, легко без преобразования шестнадцатеричного в двоичное, а затем умножить каждый бит на степень 2 и суммировать все значения, чтобы получить результат, это занимает слишком много времени: пример числа (32 бита): 0xFFFFFE58

так как я могу это сделать?


person karim    schedule 04.09.2014    source источник
comment
В компьютере любое число обычно считается двоичным.   -  person someuser    schedule 04.09.2014
comment
Я не уверен, какое представление должно принимать ваше десятичное число. Пробовали sprintf(buffer, "%d", 0xFFFFFE58);?   -  person Sergey L.    schedule 04.09.2014
comment
Как вы можете сделать что? читать шестнадцатеричное число и печатать как десятичное? Пожалуйста, уточните свой вопрос   -  person Tom Tanner    schedule 04.09.2014
comment
Я хочу преобразовать шестнадцатеричное число в десятичное без использования компьютера.   -  person karim    schedule 04.09.2014


Ответы (2)


без использования компьютера вы можете рассчитать это так:

0xFFFF FE58 = - 0x1A8 = -(1 * 16² + 10 * 16 + 8) = -(256 + 160 + 8) = -424

0xFFFF FE58 — отрицательное число в дополнении до 2. Чтобы получить абсолютное значение, вам нужно инвертировать все биты и добавить 1 в двоичном формате. Вы также можете вычесть это число из первого числа вне диапазона (0x1 0000 0000).

 0x100000000
-0x0FFFFFE58
      =
 0x0000001A8

теперь мы знаем, что ваш номер -0x1A8. теперь вам нужно сложить цифры, умноженные на их разрядное значение. 8 * 16 ^ 0 + A (что равно 10) * 16 ^ 1 + 1 * 16 ^ 2 = 424. Таким образом, десятичное значение вашего числа равно -424.

person mch    schedule 04.09.2014
comment
Я немного добавил. Надеюсь, это прояснит ситуацию. Пожалуйста, спрашивайте, что непонятно. - person mch; 04.09.2014

выполнить расчет положительного числа, а затем преобразовать его в отрицательное с дополнением до двух.

см. здесь объяснение положительного преобразования из шестнадцатеричной системы в десятичную:

http://www.permadi.com/tutorial/numHexToDec/

в основном:

  1. Получите самую правую цифру шестнадцатеричного числа, назовите эту цифру currentDigit.
  2. Сделайте переменную, назовем ее мощность. Установите значение 0.
  3. Умножьте текущую цифру на (16^степень), сохраните результат.
  4. Увеличить мощность на 1.
  5. Установите currentDigit на предыдущую цифру шестнадцатеричного числа.
  6. Повторяйте с шага 3, пока все цифры не будут перемножены.
  7. Суммируйте результат шага 3, чтобы получить номер ответа.
person shoham    schedule 04.09.2014