634-C编译器默认的类型转换

我们先来看看下面几个程序的运行结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们知道,a>b是关系表达式。在运算的时候,必须保证类型是一致的。
在这里插入图片描述
我们的C/C++是强类型语言。
如果是a=b
在这里插入图片描述
如果是a<b或者a>b
在这里插入图片描述

编译器默认类型转换

在这里插入图片描述
我们分析上图,竖着的3个箭头都是往上指向的!!!
横向的箭头表示的意思是
当代码上有float类型的变量参与运算的时候,编译器都是默认先把float转为double,为了提高运算过程中的精度。
当char类型或者short类型的变量在参与运算的时候,编译器都会默认先把这2个类型的变量转成int类型参与运算,因为整型int存储的数据量更大,所以在运算的过程中,精度更高。

横向的意思是:看到float,char,short就转,没有什么条件!

竖向的意思是:当2个竖向方向上的类型参与运算,下面的类型默认转成上面的类型。 比如说,一个int和一个long参与运算,int转为long。

所以,我们来分析下面代码:
在这里插入图片描述
a是int,b是short,他们两个在参与运算的时候,a=-1,b从short转为int,b=1,所以a<b
在这里插入图片描述

我们继续看:
在这里插入图片描述
现在a是int,b是unsigned int,所以a转成unsigned int,a的二进制就是32个1,全部当作数值进行运算,42.9亿!所以a>b
在这里插入图片描述

我们继续看下面代码:
在这里插入图片描述
b的unsigned int转为double,b=1,a=-1,b>a

类型转换问题

我们举个例子:
在这里插入图片描述
大内存的变量存不进小内存的变量!!!

a是有符号的short类型,2个字节大小:
在这里插入图片描述b是有符号的char类型。1个字节大小。b=a,把a的低16字节赋给b。
然后因为是有符号,所以1111 1111是负数。
取反+1,就是负多少,所以b=-1
在这里插入图片描述
我们看下面代码:
在这里插入图片描述
b是无符号的char,8个1全部是当作数值来运算了,所以b=255

我们看下面代码:
在这里插入图片描述
现在b=0了,因为a的低16位都是0
在这里插入图片描述
在这里插入图片描述

我们看下面代码:
在这里插入图片描述

在这里插入图片描述
把浮点数赋给整数,就是把浮点数的整数部分保留下来!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林林林ZEYU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值