uint.c:
#include <stdio.h>
int main()
{
unsigned int a = 1<<31;
unsigned int b = 0;
printf("%d\n",(int)(a>b));
return 0;
}
这个执行结果是1
int.c
#include <stdio.h>
int main()
{
int a = 1<<31;
int b = 0;
printf("%d\n",(int)(a>b));
return 0;
}
这个执行结果是0
我们去看一下他们的区别吧,左边是unit的,右边是int的
可以看到,uint的是
seta(above),int的是setg(greater),因为seta是无符号的set,setg是有符号的set。
可以看到,前面用cmp去得到四个条件码,然后在seta和setg分别去得到这个cmp的结果:
- seta(无符号):
CF = 0andZF = 0,即无符号的>0且结果不为0时,设置为1 - setg(有符号):
SF = OFandZF = 0,即有符号的结果>0且结果不为0,设置为1