将十六进制数转换为其 2 的补码

Converting hexadecimal number to its 2's complement

我应该用 C 编写一个程序,将十六进制数转换为其 2 的补码。 例如)0000008f 到 ffffff71

到目前为止,我已经想出了如何打印出二进制的 2'c 补码,但十六进制对我来说似乎是另一回事。 关于我应该看哪个方向有什么建议吗?

要计算 n 位十六进制数字的补码,可以:

  • 对每个数字进行补码(将 0 换成 F,将 1 换成 E,依此类推)然后对整个数字加一,或者
  • 从(十六进制)1 后跟 n 个零中减去数字。

如果数字不是整数的十六进制数字,则第一位必须对上述进行一些调整:

  • 对于第一种方法,使用适当的位数补足第一个数字。比如22位,第一个十六进制数只用了两位,所以用0换3,用1换2,用2换1,用3换0。
  • 对于第二种方法,从二的适当次方中减去。例如,对于 22 位,从(十六进制)400000 中减去。