2012-07-15 26 views
7

当一个整数超出该类型的范围时,最大值+ 1被加/减(取决于数字范围的哪一部分)。 例如,为什么C隐式转换像他们一样操作?

unsigned short num = 65537; 

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

在此先感谢!

+4

它截断... – Mehrdad 2012-07-15 08:33:19

+0

为什么你应该编译基本上所有可能的警告启用完美的例子。至于为什么这是在标准的,但....不知道:第。 (除非你的意思是1.这只是一个2的恭维溢出。) – Corbin 2012-07-15 08:35:14

+0

这样的警告消息的例子:'警告:大整数隐式截断为无符号类型' – curiousguy 2012-07-23 11:00:24

回答

7

对于使用二进制补码带符号整数的规则转化为Ñ位无符号类型的机器相当于丢弃所有,但低位Ñ比特。对于典型的硬件,这是进行转换的最简单的方法。

该标准允许对已签名整数的其他表示,但为了保持一致性而使用相同的转换规则。这可能需要在这些机器上做一些额外的工作,但是(a)这样的机器是非常少见的,并且(b)无论如何,这些开支应该相当小。

相关问题