2012-03-24 81 views
3

我必须对两个带符号的16位十六进制数字进行减法。 C352 - 36AE。当他们与他们做数学时,签名和未签名之间有什么区别?是唯一的解决方案将它们转换为二进制,执行签名减法,然后将答案转换回十六进制?谢谢。有符号十六进制减去vs无符号

+0

如果它们是2的补码,那么你不需要做任何特殊的事情。 – 2012-03-24 20:02:32

+0

啊,是的,对不起,他们是二的补充。所以假设二进制补码,以带符号的方式进行减法将与未经签名的答案相同? – rfmas3 2012-03-24 20:04:28

+0

你试过了吗? – 2012-03-24 20:19:30

回答

1

减法是两个相同的符号和无符号。不同的是结果是如何解释的。无符号数永远是负面的:

值0xFFFF -1签署。 0xffff是65,535无符号。

这是相同的数字。

http://en.wikipedia.org/wiki/Two%27s_complement

1

16位有符号或无符号的相减的结果始终是16个比特(即按位减法的结果)加上与第17位是上溢位(signed减法)一个17位或进位(无符号减法)。如果你只有一个16位的结果,你有一个按位减法不是一个有符号或无符号的16位减法。许多系统一次产生全部三个结果,而不是指定有符号,无符号或逐位相减。如果您打算使用减号,则可以使用溢出位,如果您打算使用无符号减法,则使用进位位,或者不使用位运算。请注意,很多人不会看第17位,因为他们从输入范围知道他们不需要真正的16位减法。例如,如果我从一个数字中减去一个我知道在0到100之间的数字,我知道它在1000-2000之间,我不需要一个真正的16位减法,所以我不需要看第17位。注意:溢出和进位是由不同的规则导出的,并不相同,但两者之间的差异已在其他地方解释过,因此我不会在此复制该答案。

相关问题