类型转换-

在C语言中,各种不同类型的数据可以混合运算。当表达式中出现类型不同的数据时,要进行类型转换。转换的方法有两种,一种是自动类型转换,一种是强制类型转换。

一、自动类型转换

不同的数据在运算时,首先进行类型转换,使之成为同类型数据,然后再进行运算。这种转换称为自动类型转换。自动类型转换是编译器自动隐式地进行的数据类型转换,这种转换不需要程序员干预。对于自动类型转换,最常见的就是算数转换、赋值转换输出转换。

1.算数转换

进行算数运算(加、减、乘、除、取余以及符号运算)时,不同类型数据必须转换成同一类型的数据才能运算。

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

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

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

2.赋值运算

该运算自动把赋值号“=”右边的表达式值得类型转换成赋值号“=”左边的变量的类型。

3.输出转换

在程序中将数据用printf函数输出时,当要输出的数据类型与输出格式不符时,便自动进行类型转换。例如,一个字符(char)型数据用整形格式输出时,相当于将char型转换成int型输出。

二、强制类型转换

自动转换类型是编译器根据代码的上下文环境自行判断的结果,有时候不是那么“智能”,不能满足所有的要求。如果需要,程序员也可以自己在代码中明确提出要进行的类型转换,这成为强制类型转换。

自动类型转换不需要再代码中体现出来;强制类型转换是程序员明确提出的、需要通过特定的格式的代码来指明的一种类型转换。换句话说,自动类型转换不需要程序员干预,强制类型转换必须有程序员干预。

强制类型转换的一般形式为:

(类型说明符)(表达式)

其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。例如:

(int) (x+7.4)       //把x+7.4的结果转换为整型
(long) a            //把a转换成长整型

例如:

#include <stdio.h>
int main()
{
    int sum=103;
    int count=7;
    double average;
    average=(double)sum/count;
    printf("Average is %lf!\n",average);
    return 0;
}

运行结果为:

Average is 14.714286!

sum和count都是int类型,如果不进行干预,那么sum/count的运算结果也是int类型,小数部分将被舍弃;虽然average是double类型,可以接收小数部分,但是小数部分提前就被“舍弃了”,它只能接收到整数部分,这就导致除法运算的结果严重失真。

上面的代码中,我们将sum强制转换为double类型,这样表达式sum/count的结果也将变成double类型,就可以保留小数部分了。

使用强制类型转换时应注意以下问题。

1)“类型说明符”必须加括号,表达式部分应当注意合理地使用括号。如上述例题中:对表达式(double) sum/count,会先执行(double) sum,将sum转换为double类型,然后再进行除法运算,这样运算结果也是double类型,能够保留小数部分。如果写作(double) (sum/count),则运算结果将是3.000000,仍然不能保留小数部分。

2)无论是自动类型转换还是强制类型转换,都只是为了本次运算而进行的临时性转换,不会改变数据本来的类型或者值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值