7
当一个整数超出该类型的范围时,最大值+ 1被加/减(取决于数字范围的哪一部分)。 例如,为什么C隐式转换像他们一样操作?
unsigned short num = 65537;
NUM将具有1的值(65536中减去)。 我的问题是:为什么会发生? 我的直觉告诉我,它与进位标志和溢出标志有关,因为最大值总是1111 ....
在此先感谢!
当一个整数超出该类型的范围时,最大值+ 1被加/减(取决于数字范围的哪一部分)。 例如,为什么C隐式转换像他们一样操作?
unsigned short num = 65537;
NUM将具有1的值(65536中减去)。 我的问题是:为什么会发生? 我的直觉告诉我,它与进位标志和溢出标志有关,因为最大值总是1111 ....
在此先感谢!
对于使用二进制补码带符号整数的规则转化为Ñ位无符号类型的机器相当于丢弃所有,但低位Ñ比特。对于典型的硬件,这是进行转换的最简单的方法。
该标准允许对已签名整数的其他表示,但为了保持一致性而使用相同的转换规则。这可能需要在这些机器上做一些额外的工作,但是(a)这样的机器是非常少见的,并且(b)无论如何,这些开支应该相当小。
它截断... – Mehrdad 2012-07-15 08:33:19
为什么你应该编译基本上所有可能的警告启用完美的例子。至于为什么这是在标准的,但....不知道:第。 (除非你的意思是1.这只是一个2的恭维溢出。) – Corbin 2012-07-15 08:35:14
这样的警告消息的例子:'警告:大整数隐式截断为无符号类型' – curiousguy 2012-07-23 11:00:24