7

hi I want to know how it is possible to convert a hexadecimal negative value (to complement encoding) to decimal, easily without converting hexadecimal to binary and then multiplying each bit in by a power of 2 and sums all the value to get the result, it takes too much time : example of number (32 bits) : 0xFFFFFE58

so how can I do it?

KarimS
  • 3,812
  • 9
  • 41
  • 64

2 Answers2

6

without using a computer you can calculate it like this:

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

0xFFFF FE58 is a negative number in 2's complement. To get the absolute value you have to invert all bits and add 1 in binary. You also can subtract this number from the first number out of range (0x1 0000 0000)

 0x100000000
-0x0FFFFFE58
      =
 0x0000001A8

now we know that your number is -0x1A8. now you have to add up the digits multiplied with their place value. 8 * 16^0 + A (which is 10) * 16^1 + 1 * 16^2 = 424. So the decimal value of your number is -424.

lord.garbage
  • 5,884
  • 5
  • 36
  • 55
mch
  • 9,424
  • 2
  • 28
  • 42
0

do a calculation on the positive number, then convert to the negative with Two's complement.

see explanation here for positive conversion from hexa to decimal:

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

basically:

  1. Get the right most digit of the hex number, call this digit the currentDigit.
  2. Make a variable, let's call it power. Set the value to 0.
  3. Multiply the current digit with (16^power), store the result.
  4. Increment power by 1.
  5. Set the the currentDigit to the previous digit of the hex number.
  6. Repeat from step 3 until all digits have been multiplied.
  7. Sum the result of step 3 to get the answer number.
shoham
  • 293
  • 1
  • 9