【问题标题】:Signed Hex Division by Decimal带符号的十六进制除以十进制
【发布时间】:2014-03-28 19:07:36
【问题描述】:

我不确定带符号的十六进制除以十进制。

long 输入的fff0bdc0 除以1000L 怎么会变成fffffc18

   long a = 0xfff0bdc0;
   a = a/1000L;
   UARTprintf("a = %x\n", a);

打印结果:a = fffffc18

谢谢,

【问题讨论】:

  • 更好地展示你的代码。结果应该是 0x41854f。
  • 不,不应该!当你除以一个负数时,你是如何得到一个正数的?
  • 嗯,我在考虑 64 位。在一个 32 位长的平台上,你是对的,它会是负数。

标签: c hex division signed


【解决方案1】:

假设long是一个32位整数,负数用 two's complement:

fff0bdc0 (hex) = -1000000 (decimal)
fffffc18 (hex) =    -1000 (decimal)

所以你的结果看起来是正确的。

【讨论】:

    猜你喜欢
    • 2013-05-28
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 2020-03-04
    • 2018-07-26
    • 2014-04-20
    相关资源
    最近更新 更多