C语言之自动类型转换

自动转换遵循以下规则:

      1)若参与运算的类型不同,则先转换成统一类型,然后进行运算。

      2)转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int型转换成long型后再进行运算。

            a.若两种类型的字节数不同,转换字节数高的类型

            b.若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型

      3)所有的浮点运算都是以双精度进行的,即使仅含float单精度运算的表达式,也要先转换成double型,再运算。

      4)char型和shor型参与运算时,必须先转换成int型。

      5)在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边的类型转换成右边的类型。如果右边量的数据类型长度大于左边时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入计算。

隐式类型转换分三种,算术转换、赋值转换和输出转换。

      1.算术类型运算(加、减、乘、除、取余以及符号运算)时,不同类型数据必须转换成同一类型的数据才能运算,算术转换原则为:在进行运算时,以表达式中最长类型为主,其它类型均转换成该类型,如:

      (1)若运算数中有double型或float型,则其它类型数据均转换成double类型进行运算。

      (2)若运算数中最长的类型为long型,则其它类型均转换成long型。

      (3)若运算数中最长类型为int型,则char型也转换成int型进行运算。算术转换是在运算过程中自动完成的。

      2.赋值转换

      进行赋值操作时,赋值运算符右边的数据类型必须转换成赋值号左边的类型,若右边的数据类型的长度大于左边,则要进行截断或舍入操作。如下:

char ch = 4;
int i = 2;
int result = 0;
float f = 4.0;
double d = 2.0;

result = ch / i + (f * d - i);

      (1)先计算ch/i,ch->int型,ch/i->int型。

      (2)接着计算f*d-i,由于最长类型为double型,故f->double型,i->double型,f*d-i->double型。

      (3)(ch/i)和(f*d-i)进行加运算,由于f*d-i为double型,故ch/i->double型,ch/i+(f*d-i)->double型。

      (4)由于result为int型,故ch/i+(f*d-i)->int,即进行截断与舍入,最后取值为整型。

      3.输出转换

      在程序中将数据用printf函数以指定格式输出时,当要输出的数据类型与输出格式不符时,便自动进行类型转换,如一个long型数据用整型格式(%d)输出时,则相当于将long型转换成整型(int)数据输出;一个字符(char)型数据用整型格式输出时,相当于将char类型转换成int型输出。注意:较长类型数据转换成短型数据输出时,其值不能超过短型数据允许的值范围,否则转换时将出错。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值