【问题标题】:how to convert negative hexadecimal to decimal如何将负十六进制转换为十进制
【发布时间】:2014-09-04 11:02:11
【问题描述】:

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

那我该怎么做呢?

【问题讨论】:

  • 计算任何通常被认为是二进制的数字。
  • 我不确定您的小数应该采用什么表示形式。试过sprintf(buffer, "%d", 0xFFFFFE58);
  • 你能做什么?读取十六进制数字并打印为十进制?请澄清您的问题
  • 我想在不使用计算机的情况下将十六进制数转换为十进制数。
  • int d= (int)0xFFFFFE58;

标签: c encoding numbers decimal negative-number


【解决方案1】:

不用电脑,你可以这样计算:

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。

【讨论】:

  • 我加了一点。我希望这能让它更清楚。请问有什么不清楚的地方。
【解决方案2】:

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

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

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

基本上:

  1. 获取十六进制数的最右边的数字,将此数字称为 currentDigit。
  2. 做一个变量,我们称之为幂。将值设置为 0。
  3. 将当前数字乘以 (16^power),存储结果。
  4. 将功率增加 1。
  5. 将 currentDigit 设置为十六进制数字的前一位。
  6. 从第 3 步开始重复,直到所有数字都相乘。
  7. 将第3步的结果相加得到答案数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-30
    • 2016-06-02
    • 2015-09-13
    • 2013-10-08
    • 2011-07-28
    • 1970-01-01
    相关资源
    最近更新 更多