如何将负十六进制转换为十进制

时间:2014-09-04 11:02:11

标签: c encoding numbers decimal negative-number

嗨我想知道如何将十六进制负值(到补码编码)转换为十进制,轻松转换十六进制到二进制,然后将每个位乘以2的幂并将所有值相加得到结果,需要花费太多时间: 数字(32位)的例子:0xFFFFFE58

所以我该怎么做?

2 个答案:

答案 0 :(得分:4)

不使用计算机,您可以像这样计算:

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

0xFFFF FE58是2&2补码中的负数。要获得绝对值,必须反转所有位并在二进制中加1。您也可以从超出范围的第一个数字(0x1 0000 0000)

中减去此数字
 0x100000000
-0x0FFFFFE58
      =
 0x0000001A8

现在我们知道您的号码是-0x1A8。现在你必须将数字乘以它们的位置值。 8 * 16 ^ 0 + A(10)* 16 ^ 1 + 1 * 16 ^ 2 = 424.所以你的数字的十进制值是-424。

答案 1 :(得分:0)

对正数进行计算,然后用二进制补码转换为负数。

请参阅此处有关从hexa到十进制的正转换的说明:

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

基本上是:

  1. 获取十六进制数字的最右边数字,将此数字称为currentDigit。
  2. 制作一个变量,让它称之为力量。将值设置为0。
  3. 将当前数字乘以(16 ^幂),存储结果。
  4. 增加力量1。
  5. 将currentDigit设置为十六进制数的前一位数。
  6. 从步骤3开始重复,直到所有数字都成倍增加。
  7. 汇总步骤3的结果以获得答案编号。