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

 更新时间:2016年07月19日 17:55:32   投稿:lqh  
本文主要介绍C 语言数据类型转换,这里通过代码实例进行详解,这是C语言基础部分,需要的朋友可以参考下

数据类型转换就是将数据(变量、表达式的结果)从一种类型转换到另一种类型。例如,为了保存小数你可以将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.在赋值运算中,赋值号两边的数据类型不同时,需要把右边表达式的类型将转换为左边变量的类型。如果右边表达式的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度。

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

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

#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语言数据类型的转换的实例详解,希望能帮助学习 C语言基础知识的同学。

相关文章

  • C++实现Go的defer功能(示例代码)

    C++实现Go的defer功能(示例代码)

    defer和go一样都是Go语言提供的关键字。defer用于资源的释放,会在函数返回之前进行调用。接下来通过本文给大家介绍C++实现Go的defer功能,感兴趣的朋友跟随小编一起看看吧
    2021-07-07
  • 深入C中常用的三种排序方法总结以及探讨分析

    深入C中常用的三种排序方法总结以及探讨分析

    本篇文章是对C中常用的三种排序方法总结以及探讨分析的概述,需要的朋友参考下
    2013-05-05
  • C语言中的字符(char)详细讲解

    C语言中的字符(char)详细讲解

    本篇文章主要介绍C语言中char的知识,并附有代码实例,以便大家在学习的时候更好的理解,有需要的可以看一下
    2016-07-07
  • Qt实现字符串生成二维码功能

    Qt实现字符串生成二维码功能

    这篇文章主要介绍了如何利用Qt实现字符串生成二维码功能,文中的实现过程讲解详细,对我们学习Qt有一定的帮助,需要的可以参考一下
    2022-01-01
  • C语言实现Fibonacci数列递归

    C语言实现Fibonacci数列递归

    这篇文章主要介绍了C语言实现Fibonacci数列递归,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • C++中的可移植性和跨平台开发教程详解

    C++中的可移植性和跨平台开发教程详解

    这篇文章主要为大家介绍了C++中的可移植性和跨平台开发教程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • C语言实现运动会管理系统

    C语言实现运动会管理系统

    这篇文章主要为大家详细介绍了C语言实现运动会管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • 一文详解C++11中的lambda函数

    一文详解C++11中的lambda函数

    小编可以明确告诉大家:lambda函数是C++11中最重要的,使用最广泛的,最具现代风格的内容,lambda函数的出现改变了C++编程的思维方式。所以快和小编学习一下C++11中lambda函数的使用吧
    2023-02-02
  • C/C++详解实现二层转发

    C/C++详解实现二层转发

    数据链路层是开放系统互连 (OSI) 模型中的第二层,该层用于通过 LAN 等单一网络进行通信的节点,第二层数据包不能从一个网络传输到另一个网络。而二层转发是根据报文的目的MAC直接进行转发,转发过程中不用对报文的头部做任何的修改
    2022-05-05
  • VS2019中CMake项目的简单使用方法

    VS2019中CMake项目的简单使用方法

    这篇文章主要介绍了VS2019中CMake项目的简单使用方法,需要的朋友可以参考下
    2020-02-02

最新评论