我正在处理一系列问题,我需要将 32位二进制补码十六进制值转换为常规十进制值。现在,我的书告诉我,每当我看到以8到f为前导的十六进制值时,它总是负数。
有问题的是: 0xfffffe58
根据我的理解,这意味着我只是在'f'值链后开始评估,让我评估' e58 '。 'e'将被转换为-2,'5'将保持不变,'8'将变为-8。将所有值乘以,得到 (-2 * 16 ^ 2)+(5 * 16)+ - 8 = -512 + 80-8 = -440。 现在,答案是-424,所以我很困惑为什么8会是正数,因为8的前导二进制数字是1,而我们使用的是2的补码,这会让我相信它会是-8
答案 0 :(得分:1)
您的计算完全在错误的轨道上。 e
无法转换为-2
; 5
不会保持不变。
您需要找到匹配的数字,以便每对加起来为F
(除了添加到10
的最后一个):
F F F F F E 5 8
0 0 0 0 0 1 A 8
等式是0xFFFFFE58
+ 0x000001A8
= 0x100000000
。 1A8
为424
。
答案 1 :(得分:1)
在两个人的赞美中,只有最重要的信号才是负数。因此,只需要检查第一个十六进制数字是8-f。较低的数字不会影响确定。所以8不是负数,它只是数字的一部分。
你试图进行转换的方式也不正确 - 你没有像你想做的那样进行数字转换,这并不是两个人的恭维如何运作。
进行转换的一种方法是二进制翻转,然后添加一个。所以F - > 0,E - >等等。
所以你会F F F F F E 5 8
- > 0 0 0 0 0 1 A 7
+ 1
= 0 0 0 0 0 1 A 8
= 424