如何表示负十六进制数?

时间:2017-11-10 00:38:16

标签: hex decimal

如果我有一个负十进制数,例如-5,并将其转换为十六进制格式。我可以简单地在十六进制数字前面加上一个负号吗?或者是否有另一种方式可以像2对二进制的恭维一样?

1 个答案:

答案 0 :(得分:4)

没有“单向”来表示负数。也就是说,有许多标准方法可以表示负数。为了保持数学简单,我将假设所有数字都使用4位。

  1. 使用符号位(二进制)0111为7,但1111为-7。 (也可以反过来0111是-7 1111是7。
  2. 使用1的补码。 0111为7,但1000为-7(所有位都被翻转。这具有0000的奇数属性为自然0,但1111为a(负零) -0。
  3. 使用2的补码。否定是1的补码加1,因此0111为7,但1000 + 00011001为-7。这利用整数溢出来维持负零。 0000否定1111 + 0001溢出到0000。它还有一些很好的属性,如果可以写入两个数字,那么将一些数字加上其负分辨率加到零(有一个负数而不是正数)。 7 +( - 7)为0111 + 1001,溢出为0 0000
  4. 你可能会听到这样的说法:“这意味着你想要的意思”。这意味着你可以想出任何方式来表示任何东西,你只需要根据你想要的值建立一个位的“地图”。例如,这是一种表示素数的奇怪,异想天开的方式。

    (bits) => value
    0001 => 2
    0010 => 3
    0011 => 5
    0100 => 7
    0101 => 11
    0110 => 13
    0111 => 17
    (and so on)
    

    这样的系统很难用数学算法,但这是一个例子,你不必受限于某种特定的做事方式。只要您构建例程以从预期输入生成预期输出,您就可以将位映射到值表示您希望它的含义。

    这种意义是你对比特强加的意义很重要。当您开始处理文本时,“编码”是对存储文本的位施加的含义,相同的位有时会编码不同的字母。