当整数超出类型的范围时,最大值 + 1 被添加/减去(取决于数字范围的哪一部分)。 例如,
unsigned short num = 65537;
num 的值为 1(减去 65536)。 我的问题是:为什么会这样? 我的直觉告诉我这与进位标志和溢出标志有关,因为最大值始终是 1111....
提前致谢!
最佳答案
对于对有符号整数使用二进制补码的机器,转换为 N 位无符号类型的规则等同于丢弃除低阶 N 之外的所有位。对于典型的硬件,这是进行转换的最简单方法。
标准允许有符号整数的其他表示,但为了一致性使用相同的转换规则。这可能需要在此类机器上做一些额外的工作,但是 (a) 此类机器非常罕见,并且 (b) 无论如何费用应该相当小。
关于c - 为什么 C 隐式转换像它们那样运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11490542/