2

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

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

但是,x > yy被强制转换为有符号短整数(然后在比较中隐式转换为无符号整数)时,它采用 MAX_UINT 的值是不正确的。为什么会这样?是否y正在延长标志,或者还有什么会导致这种奇怪的行为?

4

1 回答 1

4

对于不适合有符号类型的正值的值,无符号到有符号的转换是实现定义的。在这里,对于您的特定编译器,结果可能是-1,然后转换为 unsigned is UINT_MAX

于 2013-03-05T16:54:51.387 回答