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)
这个说法
if(a>b)
Run Code Online (Sandbox Code Playgroud)
涉及到有符号整数和无符号整数之间的运算(比较),按照提升规则,有符号整数会被提升为无符号整数并产生一个巨大的无符号值:例如,在32位整数的环境中,该值将是 4294967196 (2 32 - 100)。
因此,条件看起来像
if (100 > 4294967196)
Run Code Online (Sandbox Code Playgroud)
并将评估为假,确保else块中的代码被执行。