数据类型的显式转换和隐式转换

      如下面的一段小程序:
void main(void)
{
      unsigned char a;
      unsigned int b;
      b=100*4;
      a=b;
      printf(“%d”,a);
      while(1);
}
      如果你是细心的朋友定会发现a的值是不会等于100*4的。是的,a和b一个是char类型一个是int类型,从以前的学习可知char只占一个字节值最大只能是255。但编译时为何不出错呢?可知b=100*4就可以得知b=0x190,最后输出a为144,即0X90,也就是输出b的低8位。这是因为执行了数据类型的隐式转换。
      隐式转换是在程序进行编译时由编译器自动去处理完成的。所以有必要了解隐式转换的规则:

1.变量赋值时发生的隐式转换,"="号右边的表达式的数据类型转换成左边变量的数据类型。就如上面例子中的把INT赋值给CHAR字符型变量,得到的CHAR将会是INT的低8位。如把浮点数赋值给整形变量,小数部分将丢失。

2.所有char型的操作数转换成int型。

3.两个具有不同数据类型的操作数用(数学)运算符连接时,隐式转换会按以下次序进行:如有一操作数是float类型,则另一个操作数也会转换成float类型;如果一个操作数为long类型,另一个也转换成long;如果一个操作数是unsigned类型,则另一个操作会被转换成unsigned类型。
      对应的显示转换就用“(数据类型)操作数”即可实现。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值