C 11 6.3.1.3,用于强制转换:
否则,如果新类型是无符号的,则通过重复添加或减去新类型所能代表的最大值,直到该值在新类型的范围内,来转换该值。
当我尝试
printf("%d", (unsigned short) 0x80000001);
我希望结果是65535
,但我得到了1
。
为什么在这种情况下返回1
?
答案 0 :(得分:4)
0x80000001
= 2147483649
unsigned short
的最大值为65535
。比65536
多一个。2147483649 % 65536
= 1
。但这是形式理论-实际上,这与简单地取0x80000001
的最低16位(即值0x0001
)相同。
答案 1 :(得分:2)
(unsigned short) 0x80000001
,在OP中为65535。unsigned short 1
根据引用的C 11 6.3.1.3转换为1。
根据{em>整数促销,int 1
当然会转换为"%d"
,作为...函数的一部分。这与"1"
和{{1}}相匹配。