我得到了一些看起来像的代码:
unsigned int x = 0xDEADBEEF;
unsigned short y = 0xFFFF;
if (x > (signed short) y)
printf("Hello");
然而,当x > y
被转换为有符号的short(然后在比较中隐式转换为unsigned int)时,y
并不是真的,它取值为MAX_UINT。为什么会这样? y
是否会延长标志,或者还有什么会导致这种奇怪的行为?
答案 0 :(得分:4)
无符号到有符号转换是实现定义的。在这里,对于您的特定编译器,可能结果为-1
,然后转换为无符号为UINT_MAX
。