【发布时间】:2018-04-23 03:54:25
【问题描述】:
如果我有一个负十进制数,例如 -5,并将其转换为十六进制格式。我可以简单地在十六进制数字前面加上一个负号吗?还是有另一种方法,比如二进制中的 2 的恭维?
【问题讨论】:
-
通常我们使用十六进制格式来表示数字,因此不会放负号。而不是按照您的建议,您将根据表示设置十六进制值。
如果我有一个负十进制数,例如 -5,并将其转换为十六进制格式。我可以简单地在十六进制数字前面加上一个负号吗?还是有另一种方法,比如二进制中的 2 的恭维?
【问题讨论】:
没有“一种方式”来表示负数。也就是说,有许多标准方法可以表示负数。为了简单起见,我假设所有数字都使用 4 位。
0111 是 7,但 1111 是 -7。 (也可以反过来做 0111 is -7 1111 is 7.0111 是 7,但 1000 是 -7(所有位翻转。这具有 0000 是自然 0,但 1111 是(负零)-0 的奇数属性。0111 是 7,但 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)
这样的系统很难进行数学运算,但它是一个示例,您不必受限于做任何事情的特定方式。只要您构建例程以从预期输入产生预期输出,您就可以使位到值的映射意味着您想要的任何含义。
这种将意义强加于位的想法很重要。当你开始处理文本时,“编码”是强加于存储文本的位的含义,相同的位有时会在不同的编码方案中编码不同的字母。
【讨论】: