当前课程知识点:C语言程序设计 > 第3章 基本数据类型、运算符与表达式 > 3.6 数据类型转换 > 数据类型转换
同学们大家好
前面我们学习了数据类型
运算符
表达式
在程序中经常会遇到不同类型的数据进行运算
这时就需要将不同类型的数据
转换成同一种类型
然后进行运算
什么情况下需要进行转换呢
①运算转换 不同类型数据混合运算时
②赋值转换 把一个值赋给与其类型不同的变量时
③输出转换 输出时转换成指定的输出格式
④函数调用转换 实参与形参类型不一致时转换
C语言的数据类型允许相互转换
转换的方法有两种一种是自动转换
一种是强制转换 在一个赋值语句中
如果赋值运算符左侧变量的类型
和右侧表达式的类型不一致
那么赋值时将发生自动类型转换
类型转换的原则是
将右侧表达式的值转换成左侧变量的类型
我们先来看下这段程序
编译运行后可看到
将整型数23赋给float型时
数值不变
但以浮点数形式存储到变量中
char型数据赋给int型时
由于字符只占1个字节
而整型为4个型字节
因此将字符数据放到整型变量
存储单元的低8位中
将赋值数据赋给整型变量时
舍弃浮点数的小数部分
将一个double型数据赋值给float型变量时
截取其前面7位有效数字
存放到float变量的存储单元中
但应注意数值要在float变量所能容纳的范围之内
否则会出现溢出的错误
将一个int型数据赋给一个char型数据时
采用截取的方式只将其低8位原封不动地
送到char型变量
在进行表达式运算时
如果一个表达式中
混有多种不同的类型的操作数
则按照
先转换后运算
的原则
下面以图示的方式显示数据类型的转换方式
如字符型和短整型转换成整型
float型转换为double型
一般而言
将取值范围小的类型转换为
取值范围大的类型
自动类型转换是编译器根据代码的
上下文环境自行判断的结果
不能满足所有的需求
因此可以利用强制类型转换运算符
将一个表达式转换成所需类型
一般形式为
(类型说明符)后跟 (表达式)
功能是
把表达式的运算结果强制转换为
类型说明符所表示的类型
下面编程验证
编译运行后可看出在程序的第五行
将整型变量a的值按浮点型形式输出
第六行将x+y的结果按整型形式输出
这里要特别说明
无论是强制转换或是自动转换
都只是为了本次运算的需要
而对变量的数据类型进行的临时性转换
并不改变数据说明时对该变量定义的类型
C语言表达能力强
其中一个重要方面就在于它的表达式类型丰富
运算符功能强
因而使C语言使用灵活
适应性强
在后面得课程中将进一步看到这些优越性
到此我们关于C语言的运算符
和表达式的知识就学习到这
同学们 再见
-计算思维与计算机
--计算思维与计算机
--计算思维与计算机
--计算思维和计算机
-2.1 程序设计语言的发展及其特点和应用
--程序设计语言的特点及发展
- 2.2 C语言程序的基本结构及编制C语言程序的基本步骤
--C语言程序的结构和编制步骤
-3.1 C语言的数据类型
--C语言的数据类型
--C语言的数据类型
-3.2 常量
--常量
--常量
-3.3 什么是变量
--什么是变量
--什么是变量
-3.4 如何进行算术运算
--如何进行算术运算
--如何进行算术运算
-3.5 赋值运算符和逗号运算符
--赋值运算符和逗号运算符
-3.6 数据类型转换
--数据类型转换
--数据类型转换
-4.1 格式化输出printf
--格式化输出
-4.2 格式化输入scanf及字符数据的非格式化输入输出
--格式化输入
-5.1 关系运算符和关系表达式
--关系运算符和关系表达式
-5.2 逻辑运算符和逻辑表达式
--逻辑运算符和逻辑表达式
-5.3 条件运算符和条件表达式
--条件运算符和条件表达式
-5.4 if语句
--if语句
--if语句
-5.5 switch语句
--switch语句
--switch语句
-6.1 while语句
--while语句
--while语句
--do-while语句
-6.2 for语句
--for语句
--for语句
-6.3 循环的嵌套
--循环的嵌套
--循环的嵌套
-6.4 break语句和continue语句
--break和continue语句
-7.1 一维数组的定义和引用
--一维数组的定义和引用
-7.2 一维数组的赋值
--一维数组的赋值
--一维数组的赋值
-7.3 二维数组的定义和引用
--二维数组的定义和引用
-7.4 二维数组的赋值
--二维数组的赋值
--二维数组的赋值
-7.5 字符串的本质
--字符串的本质
--字符串的本质
-7.6 字符串操作的常用函数
--字符串常用函数
-7.7 字符串数组
--字符串数组
--字符串数组
-8.1 函数概述
--函数概述
--函数概述
-8.2 有参函数
--有参函数
--有参函数
-8.3 函数参数的传递方式
--函数参数的传递方式
-8.4 变量的作用域和生存期
--变量的作用域和生存期
-8.5 变量的存储类型
--变量的存储类型
--变量的存储类型
-8.6 函数的嵌套和递归调用
--函数的嵌套和递归调用
-8.7 函数的作用域与封装
--函数的作用域与封装
-9.1 指针变量的概念(上)
--指针变量的概念(上)
-9.2 指针变量的概念(下)
--指针变量的概念(下)
-9.3 指向一维数组的指针变量
--指向一维数组的指针变量
-9.4 指向二维数组的指针变量(上)
--指向二维数组的指针变量(上)
-9.5 指向二维数组的指针变量(下)
--指向二维数组的指针变量(下)
-9.6 动态内存分配
--动态内存分配
--动态内存分配
-10.1 编译预处理
--编译预处理
-11.1 用户自己建立数据类型
--用户自己建立数据类型
-11.2 定义结构体类型变量
--定义结构体类型变量
-11.3 结构体变量的引用与初始化
-11.4 结构体数组
--结构体数组
--结构体数组
-11.5 指向结构体类型数据的指针
--指向结构体类型数据的指针
-12.1 文件的基本概念和文件指针
--文件的基本概念和文件指针
-12,2 文件的打开和关闭
--文件的打开和关闭
--文件的打开和关闭
-12.3 文本文件读写
--文本文件读写
--文本文件读写
-12.4 二进制文件读写
--二进制文件读写
--二进制文件读写