9

自从我上次在位和字节级别编程以来已经有很长时间了,我想确认一下我似乎记得的那些日子:

假设我有两个长度相等的整数(1、2、4、8 字节;没关系),我将它们相加:如果它们是有符号或无符号的,求和的逐位结果是否不同。换句话说:无论它们是有符号整数还是无符号整数,这些位最终会相同吗?

我的直觉和脆弱的记忆告诉我他们会的,但我只是想确认一下。谢谢。

4

2 回答 2

13

假设实现使用 2 的补码作为有符号整数的表示,那么结果将是相同的。在其他表示中,他们不会。

编辑

正如评论中所指出的,有符号加法中的溢出是未定义的行为,这意味着在这种情况下对结果无话可说。

于 2013-02-19T16:28:01.760 回答
4

我知道这已经得到解答,但是我曾经使用过的所有处理器(大约有十几种不同的架构——我的意思是架构,而不是不同的风格)只有一种类型的 ADD 指令——它可能有不同的大小选项,但是这是一条指令。这同样适用于减法。它在乘法和除法上有所不同,它通常具有有符号和无符号的变体——或者需要以某种方式对输入进行“符号调整”。

区分有符号和无符号的唯一其他指令是条件指令,例如“小于分支”将具有“无符号小于”的一种变体和“有符号小于”的一种变体(其中一个通常称为“小于”以外的其他内容,例如“低于”或“进位设置”等)。

于 2013-02-19T16:53:09.023 回答