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

Zak*_*kum 7 c integer c89 implicit-conversion unsigned-integer

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

unsigned short num = 65537;
Run Code Online (Sandbox Code Playgroud)

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

提前致谢!

Kei*_*son 7

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

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