如何表示一个十六进制负数?

The*_*eld 1 hex decimal

如果我有一个负的十进制数字,例如说-5,然后将其转换为十六进制格式。我可以简单地在十六进制数字前加一个负号吗?还是有另一种方式来做到这一点,例如用二进制补码2?

Edw*_*uck 5

没有“一种方法”来表示负数。也就是说,有很多标准的方法可以表示负数。为了简化数学运算,我将假设所有数字都使用4位。

  1. 使用符号位(二进制)0111为7,但1111为-7。(也可以反向做0111-7 1111是7。
  2. 使用1的补码。 0111是7,但是1000-7(所有位都被翻转。这具有奇数性质,0000即自然0,但自然1111为负0)。
  3. 使用2的补码。否定是1的补码加1,所以01117是补码,1000 + 0001或者1001是-7。这利用整数溢出来保持不为负零。 0000否定的是1111 + 0001溢出到0000。它还具有一些不错的属性,例如,可以将两个数字加起来(加上负数可以解析为零)(前提是两个数字都可以写(负数比正数多))。7 +(-7)0111 + 1001溢出到0 0000

您可能会听到这样的说法:“位意味着您想要它们代表的一切”。这意味着您可以想出多种方法来表示任何东西,您只需将位“映射”到所需的值即可。例如,这是表示质数的一种奇怪的,异想天开的方式。

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

这样的系统很难进行数学运算,但是这是一个示例,您不必受限于执行任何操作的特定方式。只要构建例程以从期望的输入中产生期望的输出,就可以使位到值的映射意味着您想要的含义。

意义就是将事物强加给您的想法很重要。当您开始处理文本时,“编码”是强加给存储文本的位的含义,相同的位有时会编码不同的字母。