C简称Int转换

时间:2013-03-05 16:51:00

标签: c type-conversion

我得到了一些看起来像的代码:

unsigned int x = 0xDEADBEEF;
unsigned short y = 0xFFFF;
if (x > (signed short) y)
    printf("Hello");

然而,当x > y被转换为有符号的short(然后在比较中隐式转换为unsigned int)时,y并不是真的,它取值为MAX_UINT。为什么会这样? y是否会延长标志,或者还有什么会导致这种奇怪的行为?

1 个答案:

答案 0 :(得分:4)

对于不符合签名类型正值的值,

无符号到有符号转换是实现定义的。在这里,对于您的特定编译器,可能结果为-1,然后转换为无符号为UINT_MAX