为什么控制转到 else 块进行此条件检查?

Ami*_*zad 2 c unsigned-integer

我想知道为什么它只执行else语句

代码如下:

#include<stdio.h>
int main()
{
    unsigned int a = 100;
    int b = -100;
    if(a > b)
    {
        print("Obviously 100 is Bigger than -100!\n");
    }
    else
        print("Something Unexpected has Happened\n");
}
Run Code Online (Sandbox Code Playgroud)

Sou*_*osh 6

这个说法

  if(a>b)
Run Code Online (Sandbox Code Playgroud)

涉及到有符号整数和无符号整数之间的运算(比较),按照提升规则,有符号整数会被提升为无符号整数并产生一个巨大的无符号值:例如,在32位整数的环境中,该值将是 4294967196 (2 32 - 100)。

因此,条件看起来像

if (100 > 4294967196)
Run Code Online (Sandbox Code Playgroud)

并将评估为假,确保else块中的代码被执行。