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 = 0
andZF = 0
,即无符号的>0且结果不为0时,设置为1 - setg(有符号):
SF = OF
andZF = 0
,即有符号的结果>0且结果不为0,设置为1