假设有以下代码:
unsigned int foo()
{
unsigned int var = 0x12345678;// assuming 4 bytes
return var;
}
void bar()
{
unsigned short res = foo(); //assuming short is 2 bytes
}
res的预期值是多少?
您的代码存在一些问题(没有unsigned int foo()
,return int
而不是return var
(。我相信会有人编辑的。
C99表示:
6.3.1.3有符号和无符号整数[..]如果新类型是无符号的,则通过重复地将新类型中可以表示的最大值多加或减去一来转换值直到该值在新类型的范围内。
因此,假设您平台上的unsigned short
的范围为0..65535,则res的值将为0x12345678-65536*n,或0x12345678%65536=0x5678。
最后16位应用作无符号短(res(的值。
0x12345678 is 10010001101000101011001111000.
这可能会使空头成为0101011001111000 = 0x5678
int的大小为32位,short的大小为16位。那么变量res的值将为0x5678。