7

当整数超出类型的范围时,最大值 + 1 被加/减(取决于数字所在范围的哪一部分)。例如,

unsigned short num = 65537;

num 的值为 1(减去 65536)。我的问题是:为什么会这样?我的直觉告诉我它与进位标志和溢出标志有关,因为最大值始终是 1111....

提前致谢!

4

1 回答 1

7

对于使用二进制补码作为有符号整数的机器,转换为N位无符号类型的规则等同于丢弃除低位N位之外的所有位。对于典型的硬件,这是进行转换的最简单方法。

该标准允许有符号整数的其他表示形式,但为了保持一致性,使用相同的转换规则。这可能需要在此类机器上进行一些额外的工作,但是(a)此类机器非常罕见,并且(b)无论如何费用应该相当小。

于 2012-07-15T08:37:22.007 回答