不同类型的数之间的比较

最近没啥事,突然想到前段时间在哪儿看过,两个不同类型的数之间进行比较,得到了意想不到的结果,今天打算研究一下,先是自己随便写了个测试程序如下:

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类型可以兼容其他较小的类型,这样理解起来就简单多了。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值