为什么C隐式转换的运行方式与它们一样?

时间:2012-07-15 08:31:57

标签: c integer implicit-conversion unsigned-integer c89

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

unsigned short num = 65537;

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

提前致谢!

1 个答案:

答案 0 :(得分:7)

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

该标准允许对有符号整数进行其他表示,但为了保持一致性,使用相同的转换规则。这可能需要在这些机器上进行一些额外的工作,但是(a)这种机器很少见,而且(b)费用应该相当小。