有符号十六进制减法与无符号

时间:2012-03-24 19:59:32

标签: hex unsigned signed subtraction

我必须对两个带符号的16位十六进制数进行减法运算。 C352 - 36AE。签名和未签名的区别,当涉及到与他们一起做数学时?唯一的解决方案是将它们转换为二进制,执行带符号的减法,然后将回答转换回十六进制?感谢。

2 个答案:

答案 0 :(得分:1)

有符号和无符号的减法相同。不同的是如何解释结果。无符号数字永远不会是负数:

0xffff是-1签名。 0xffff是65,535无符号。

这是相同的数字。

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

答案 1 :(得分:1)

16位有符号或无符号减法的结果总是16位(是逐位减法的结果)加上第17位,第17位是溢出位(有符号减法)或进位(无符号减法) 。如果您只有16位结果,则进行逐位减法,而不是有符号或无符号16位减法。许多系统不是同时指定有符号,无符号或按位减法,而是一次生成所有三个结果。如果您打算使用带符号的减法,则稍后使用溢出位;如果您打算使用无符号减法,则使用进位,或者不使用按位减法。请注意,许多人不看第17位,因为他们从输入范围知道他们不需要真正的16位减法。例如,如果我从一个我知道在1000-2000之间的数字中减去一个我知道在0到100之间的数字,我不需要真正的16位减法,所以我不需要看在第17位。注意:溢出和进位是由不同的规则导出的,并且不一样,但两者之间的区别已在其他地方解释过,所以我不会在这里重复这个答案。