添加两个有符号或无符号整数

时间:2013-02-19 16:24:17

标签: c++ c integer twos-complement

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

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

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

2 个答案:

答案 0 :(得分:13)

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

修改

正如评论中所指出的,签名添加中的溢出是未定义的行为,这意味着在这种情况下无法对结果进行任何说明。

答案 1 :(得分:4)

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

区分有符号和无符号的唯一其他指令是条件指令,例如: “分支小于”将有一个变体为“unsigned less than”和一个变体为“signed less than”(其中一个通常被称为“小于”以外的东西,例如“under”或“carry set”或某些此类)。