如果我有一个负的十进制数,比如说-5,并将其转换为十六进制格式。我能否简单地在十六进制数前面加上负号?或者像使用二进制的补码那样进行另一种处理方式?
0111
代表7,而1111
代表-7(或者反过来,0111
代表-7,1111
代表7)。0111
代表7,而1000
代表-7(所有位取反)。这种方式有一个奇怪的特性,即0000
表示自然数0,而1111
表示负零(-0)。0111
代表7,而1000 + 0001
或1001
代表-7。这种方式利用整数溢出来避免负零的存在。例如,0000
的相反数是1111 + 0001
,结果溢出为0000
。此外,它还有一个好处,即将某个数与其相反数相加可以得到0,前提是这两个数都能够被表示出来(负数比正数多一个)。例如,7 + (-7)等于0111 + 1001
,结果溢出为00000
。(bits) => value
0001 => 2
0010 => 3
0011 => 5
0100 => 7
0101 => 11
0110 => 13
0111 => 17
(and so on)