当前课程知识点:C语言程序设计(上) > 数据计算实现与顺序结构程序设计(二) > 2.6 混合运算及数据类型转换 > 2.6 混合运算及数据类型转换
大家好
混合运算及数据类型转换
是我们这章的最后一个问题
这个式子我们是看见过的
我们这里边没有任何说
强制的你把它转换成谁
那它是 要不要转换呢
所以是这样子
当它当前这个操作 遇到了不同类型的时候
它会要求 先转换成相同类型
再进行运算
比如说 3.6和a进行运算的时候做乘法
那a和3.6必须是同类型的
如果a里边是一个整型的
那会自动的把a里的整型数转成实型数
才做和3.6的运算
那么也就是说
当我做3除以5的时候
它并没有冲突 和3.6没关系
当前这个除法
不影响我当前的 你的类型是一致的
3/5 那得到的结果是什么呢
就不是0.6了 就是0
为什么呢
一个3整型数 5整型数 得到整型数0
所以说 做除法一定要注意
那现在呢你这得到了0
0和sinx要相乘
而0和前面的实型数要相加
那现在0乘这个数一定是0了
不管它是整型的0还是实型的0
那前边的这个实型数
和后边的如果是整型的0
那我们要相加的时候
那就是一个实型数和整型数遇到了一起
先转换 再运行
所以呢 我们现在说
这类转换 不是人为的
是系统自动判断的
当两个不同的数据类型进行计算的时候
一定先转换成同一个类型
但是呢 这跟别的语言里边有一点不同
有的语言里是这样
把整个式子的类型
都转换成相同的类型再进行运算
而C里边呢是
走到一处 进行当前操作
你只要保持一致就可以了
所以 这是一个陷阱
有时候我们说 整个式子是实型的
那这块是整型的不要紧
其实不是这样
你整型的一定造成了这一块是0
所以呢 我们大家说
1/2 本来应该是0.5
可是除的结果一定是0
那2.0+1/2 函得的结果是
2.0 而不是2.5
那还有一个呢说
我们这个隐式转换的一个规则
大家刚才基本上已经听出来了
我们再明确一下 什么规则呢
就是说我不强制你转换
你到底按什么原则转换呢
基本上是按你在内存里占得位数
原则是 位数少的向位数多的转换
我们换一个说法说
把精度低的向精度高的进行转换
那我们说 刚才大家已经听见了
隐式转换的规则 是什么样子呢
我们这样说
即 精度低的向精度高的转换
什么叫精度低
是说它在内存里占的 位数越少
它表达的精度 就必然低了
所以原则是
只要是精度低的和精度高的在一起
咱是向高的转换
比如说char型和int
不管int是两个字节的int还是4个字节的int
那你把这一个字节的字符
先转换成int 再运算
比如说float是4个字节
double是8个字节
那先转换成8个字节的double
我们再进行运算
那这一块要稍微说明一下的是
运算器里的对实型数的运算
其实都是double型的
是因为运算器它的宽度都是double型的
所以只有到输出的时候
我把这个数据搁在一个 float里边呢
还是搁在一个double型的数据里边
是在于 你定义的当时的变量
我们看一下 下面这个例子
那就是一个整型数加上一个字符型
当然 是先把字符转成整型
那我们后边呢 涉及到
整型的i和 float的f
那当然是
把它转换成 float型进行运算
后边呢 我们也看一样的
d和e 也是不同的类型
转换成double型
那在这个过程里边
int型和double型类型的运算
一定是double型
再看下边的一定是double型
这double和double运算 肯定是double型
那么最终 我们给f里边赋值的到底
我们运算完了是double型
那我们现在赋值过去的
到底是double还是float呢
那是f 取决于f 你的容量是多大
你的容量只有4个字节
当然我赋值的是按照4个字节去赋值的
所以呢
只是说 就说我这个f 我们又转换成
我们又把f变成8个字节去存储
f还是4个字节
只是运算的过程里边它是按double型的算的
所以呢 它本身f并没有转变
只是按 一个什么类型在进行运算
那强制转换就不同了
强制转换说 这有一个表达式
这个表达式运算的结果
可能是实型 也可能是整型 也可能double型
我想让你变成整型
我前边给一个 强制的整型转换
比如说 刚才我们说的这个结果
括弧int
无论你这里边现在运算完了的
是整型实型字符型
我都会让你变成 整型
当然 你可以也强制转换成float
强制转换成double是一样的
这叫显式的 人为的 给它进行的一个转换
所以呢 这个转换一定在前边会加上一个括弧
给的是例行的一个关键字
-1.1 计算机的问题求解方法
--讨论题:数学模型
-1.1 计算机的问题求解方法--作业
-1.2 C语言与C程序
--讨论题:运算符
-1.3 C语言处理系统与程序调试运行
--例程
-1.4 程序中的人机交互
--例程
--作业讨论区
-2.1 算术运算的C程序实现
--算术混合运算.c
-2.1 算术运算的C程序实现--作业
-2.2 关系运算的C程序实现
--bukao.c
--字符比较.c
--讨论题:比较大小
-2.2 关系运算的C程序实现--作业
-第二周作业--作业
-2.3 逻辑运算的C程序实现
--计算结合性
--闰年.c
--自动购票问题.c
-2.3 逻辑运算的C程序实现--作业
-2.4 位运算的C程序实现
--讨论题:位运算
-2.5 几种很个别的运算
--讨论题
--讨论题
-2.5 几种很个别的运算--作业
-2.6 混合运算及数据类型转换
--讨论题:数据类型
-2.7 顺序结构程序实例
--Video
--三角形面积.c
--讨论题:工业产值
-2.7 顺序结构程序实例--作业
-3.1 程序中的路径选择实现
--打印学生成绩.c
--一元二次方程.c
-3.1 程序中的路径选择实现--作业
-3.2 路径中的再选择——嵌套判断
--例程
--讨论题:程序改错
-3.2 路径中的再选择——嵌套判断--作业
-3.3 复杂判断问题的C程序设计
--3.3 多级选择
--银行存款.c
--讨论题:多级选择
-3.4 多分支问题的C程序设计
--加减乘除运算.c
-3.4 多分支问题的C程序设计--作业
-3.5 GOTO的适当使用
-3.6 选择结构的程序实例
--3.6 程序展示
--计算第几天.c
--讨论题:输出奇数
--讨论题:计算税金
-3.6 选择结构的程序实例--作业
-第四周作业--作业
-4.1 需要重复执行的程序
--求和.c
--打印学生成绩.c
--统计录入速度.c
--求平均数.c
-4.1 需要重复执行的程序--作业
-4.2 至少要执行一次的循环
--n的阶乘.c
--字符分类统计.c
-4.2 至少要执行一次的循环--作业
-4.3 已知循环次数用for语句
--求和问题.c
--数列求和.c
--讨论题:循环语句
-4.3 已知循环次数用for语句--作业
-4.4 循环控制——简单循环应用
--水仙花数.c
--讨论题:死循环
--讨论题:猜数字
-循环结构的程序设计(一)--4.4 循环控制——简单循环应用
-4.5 循环的嵌套
--讨论题:程序运行
-4.5 循环的嵌套--作业
-4.6 break与continue
--最大素数.c
-4.6 break与continue--作业
-4.7 循环的综合应用
--数的排列组合.c
--鸡兔同笼.c
--打印空心字符.c
--讨论题:打印图形
--讨论题:计算闰年
-第六周作业
-第六周作业--作业
-5.1 同类有序数据处理问题
-5.2 一维数组的定义和引用
--数组定义.c
--数组初始化.c
--反向输出.c
--讨论题:对称数
-5.2 一维数组的定义和引用--作业
-5.3 一维字符串数组
--讨论题:编程
-5.4 字符串处理函数
--字符串反向.c
--字符串函数
-5.5 二维数组的定义与使用
-5.6 二维数组的输入输出
-5.6 二维数组的输入输出--作业
-5.7 二维数组的应用
--转置矩阵.c
--讨论题:修改程序
-5.8 二维字符数组
--5.8 单词排序
--单词排序.c
-5.8 二维字符数组--作业
-5.9 数组综合应用
--统计成绩.c
--统计字符次数.c
--讨论题:洗牌
-本期课程结束语
--end
-第八周编程作业
-《C语言程序设计(上)》期末复习参考
--html
-《C语言程序设计(上)》期末复习参考答案
--html