麻烦32位二进制补码十六进制转换

时间:2014-09-14 03:36:26

标签: hex

我正在处理一系列问题,我需要将 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

2 个答案:

答案 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 = 0x1000000001A8424

答案 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