C语言数据类型转换实例代码

作者:lqh 时间:2023-12-04 11:48:36 

数据类型转换就是将数据(变量、表达式的结果)从一种类型转换到另一种类型。例如,为了保存小数你可以将int类型的变量转换为double类型。

数据类型转换的一般格式为:

(type_name) expression

type_name为要转换到的数据类型,expression为表达式。例如:


(float) a; //把a转换为实型
(int)(x+y); //把x+y的结果转换为整型
(float) 100; //将一个常量转换为实型

【示例】将整数转换为浮点数:


#include <stdio.h>
int main(){
int sum = 17, count = 5;
double mean;
mean = (double) sum / count;
printf("Value of mean : %f\n", mean);
return 0;
}

运行结果:

Value of mean : 3.400000

需要注意的是,类型转换运算符( )的优先级高于/ ,(double) sum / count会先将 sum 转换为 double 类型,然后再进行除法运算。如果写作(double) (sum / count) ,那么运行结果就是 3.000000。

这种由程序员显式进行的转换称为强制类型转换。除了强制类型转换,在不同数据类型的混合运算中编译器也会隐式地进行数据类型转换,称为自动类型转换。

自动类型转换遵循下面的规则:

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

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

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

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

5.在赋值运算中,赋值号两边的数据类型不同时,需要把右边表达式的类型将转换为左边变量的类型。如果右边表达式的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度。

下图表示了类型自动转换的规则:

C语言数据类型转换实例代码

【示例】自动数据类型转换。


#include<stdio.h>
int main(){
float PI=3.14159;
int s1, r=5;
double s2;
s1 = r*r*PI;
s2 = r*r*PI;
printf("s1=%d, s2=%f\n", s1, s2);
return 0;
}

运行结果:

s1=78, s2=78.539753

在计算表达式r*r*PI时,r 和 PI 都转换成double类型,表达式的结果也为double类型。但由于 s1 为整型,所以赋值运算的结果仍为整型,舍去了小数部分。

注意是将小数部分直接丢掉,而不是按照四舍五入向前舍入。

无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。

请看下面的例子:


#include<stdio.h>
int main(){
float f=5.75;
printf("(int)f=%d, f=%f\n",(int)f, f);
return 0;
}

运行结果:

(int)f=5, f=5.750000

标签:C语言,数据类型转换
0
投稿

猜你喜欢

  • jenkins+maven+svn自动部署和发布的详细图文教程

    2023-08-24 05:18:07
  • JDK13的新特性之AppCDS详解

    2023-03-19 10:32:38
  • Spring Boot与Kotlin 整合全文搜索引擎Elasticsearch的示例代码

    2023-03-18 11:57:58
  • C# dynamic关键字的使用方法

    2023-02-26 08:40:01
  • 最最常用的 100 个 Java类分享

    2023-08-21 08:45:05
  • WinForm窗体间传值的方法

    2023-12-17 08:53:08
  • 使用flutter的showModalBottomSheet遇到的坑及解决

    2021-12-07 22:58:29
  • C#读取系统字体颜色与大小的方法

    2021-12-29 07:54:57
  • Java中使用HashMap时指定初始化容量性能解析

    2023-01-01 11:05:27
  • Mybatis generator如何自动生成代码

    2023-08-13 10:15:15
  • Java实现简单猜数字小游戏

    2023-11-28 08:10:07
  • Android动态布局小结

    2021-10-17 12:04:39
  • Android App中ListView仿QQ实现滑动删除效果的要点解析

    2022-11-22 03:05:57
  • Android List(集合)中的对象以某一个字段排序案例

    2021-10-07 03:28:39
  • 基于C#调用OCX控件的常用方法(推荐)

    2021-06-24 11:56:29
  • C#对文件名智能排序的算法

    2022-05-02 16:18:28
  • break在scala和java中的区别解析

    2021-08-02 19:24:46
  • C# 泛型字典 Dictionary的使用详解

    2022-01-19 23:48:17
  • Spring Boot 集成Elasticsearch模块实现简单查询功能

    2022-09-05 06:31:31
  • java并发之原子操作类和非阻塞算法

    2022-04-13 04:39:01
  • asp之家 软件编程 m.aspxhome.com