最近没啥事,突然想到前段时间在哪儿看过,两个不同类型的数之间进行比较,得到了意想不到的结果,今天打算研究一下,先是自己随便写了个测试程序如下:
void main(void)
{
unsigned int a=5;
if(a>-3)
{
printf("yes\r\n");
}else
{
printf("no\r\n");
}
}
毫不意外出现以下结果:
因为大多数同学都知道有符号和无符号比较时,会首先把有符号转化成无符号。
后来我又试了一下,把int类型改成char类型如下所示:
void main(void)
{
unsigned char a=5;
if(a>-3)
{
printf("yes\r\n");
}else
{
printf("no\r\n");
}
}
结果输入如下:
我心想,WTF,就变了一个类型,也会造成这么大影响吗?
后来网上找了点资料,看了好多资料都介绍得不是很全,看到一个答案讲得还可以(链接:https://blog.csdn.net/ykiwmy/article/details/78755863)
附上里边的结论:
下面给出我个人得出的一些结论:
1.小于int类型的数之间的比较,如short,char之间均会转化为有符号int来比较。
2.无符号int类型与其他类型如unsigned short,signed short,unsigned char, char 比较时,其他类型一律转化为无符号int类型来比较。
3.有符号int类型和非int类型如unsigned short,signed short,unsigned char, char 比较时,一律转化为有符号int类型来比较。
看了一下,感觉讲得太复杂了,脑子记不住这么多情况啊,我自己后来总结了一下,分为两种情况:
1.如果有int 类型。那其他类型就提升类型和int类型一样。
2.没有int类型,那所有数据都提升为int类型。
关于第二点,为什么都要提升成int类型,因为int类型可以兼容其他较小的类型,这样理解起来就简单多了。