C语言中关于强制类型转换问题
一、C在以下四种情况下会进行隐式转换
1.算术运算式中,低类型能够转换为高类型。
a.若两种类型的字节数不同,转换成字节数高的类型
b.若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型
2.赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给他。
如果右边量的精度较大,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入。
3.函数调用中参数传递时,系统隐式地将实参转换为形参的类型后,赋给形参。
4.函数有返回值时,系统将隐式地将返回表达式类型转换为返回值类型,赋值给调用函数。
即(如果函数的类型和return表达式中的类型不一致,则以函数的类型为准。 函数的类型决定返回值的类型。
对数值型数据,可以自动进行类型转换)
二、 运算表达式中的自动类型转换(优先转为精度高,字节数大,无符号的)
1.字符必须先转换为整数(C语言规定字符类型数据和整型数据之间可以通用) 。
2.short型转换为int型(同属于整型) 。
3.float型数据在运算时一律转换为双精度(double)型,以提高运算精度(同属于实型)
4.注意有符号数与无符号数之间的运算中出现的转换
三、 有符号数与无符号数之间的运算中出现的转换
当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。
因此,从这个意义上讲,无符号数的运算优先级要高于有符号数,
在c语言操作中,如果遇到无符号数与有符号数之间的操作,编译器会自动转化为无符号数来进行处理,
因此a=20,b=4294967166,这样比较下去当然b>a了。
四.自动类型转换 VS 强制类型转换
#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 类型,可以接收小数部分,但是心有余力不足,小数部分提前就被“抹去”了。
它只能接收到整数部分,这就导致除法运算的结果严重失真。
既然 average 是 double 类型,为何不充分利用,尽量提高运算结果的精度呢?
为了达到这个目标,我们只要将 sum 或者 count 其中之一转换为 double 类型即可。
上面的代码中,我们将 sum 强制转换为 double 类型,这样sum / count
的结果也将变成 double 类型,就可以保留小数部分了,average 接收到的值也会更加精确。
( )
的优先级高于/
,对于表达式(double) sum / count
,会先执行(double) sum
,
将 sum 转换为 double 类型,然后再进行除法运算,这样运算结果也是 double 类型,能够保留小数部分。
注意不要写作(double) (sum / count)
,这样写运算结果将是 3.000000,仍然不能保留小数部分。
C语言中关于强制类型转换问题相关推荐
- (计算机组成原理)第二章数据的表示和运算-第二节7:详解C语言中的强制类型转换
文章目录 (1)无符号数和有符号数 (2)长整数变为短整数 (3)短整数变为长整数 在学习完前面几节的内容后,相信大家对数据是如何在计算机中存储.运算的有了更加深入的认识,那么接下来我们就以更深层次的 ...
- [强制类型转换]C语言中的强制类型转换相关
问题描述:C语言中的强制类型转换许多时候是隐式的,而在未注意时很可能代码会进行隐式转换而造成运行结果不正确.因此打算对C语言的类型转换做下整理和学习,发现这篇文章总结的很好,于是转载下来,原文地 ...
- C语言乘于强制转换哪个优先级高,C语言中关于强制类型转换问题
因为朋友问到,因此整理了一份,若关于一些认识有错误还望指出......算法 ● 若是一个运算符两边的运算数类型不一样,先要将其转换为相同的类型,即较低类型转换为较高类型,而后再参加运算,转换规则以下图 ...
- C语言中的强制类型转换
强制类型转换是把变量从一种类型转换为另一种数据类型.例如,如果您想存储一个 long 类型的值到一个简单的整型中,您需要把 long 类型强制转换为 int 类型.您可以使用强制类型转换运算符来把值显 ...
- 怎样在C语言中进行强制类型转换
1.强制类型转换的示例 (float) a; //将变量 a 转换为 float 类型 (int)(x+y); //把表达式 x+y 的结果转换为 int 整型 (float) 100; //将数值 ...
- c语言变量强制转换,C语言——“=”中的强制类型转换
前言:在写程序时候遇到了一些关于数据类型转换的问题,编译器也没有报错,运行时才发现数据不对,找bug花费了很多时间,但最终也发现是一些细节上的问题,特地在这里整理出一篇文章记录. 实验环境: 芯片架构 ...
- C++编程进阶4(C++中的强制类型转换运算符、不要返回自定义类内部成员的指针,引用和迭代器)
十五.C++中的强制类型转换 C语言中的强制类型转换方式有两种 T i = (T)exp; T i = T(exp); 这两种方式没有差别,C++中也支持这两种方式,但是和C++中的强制类型转换运算符 ...
- c语言强制转换字符类型,C语言中的数据类型转换问题
C语言中的数据类型转换问题 ● 字符型变量的值实质上是一个8位的整数值,因此取值范围一般是-128-127,char型变量也可以加修饰符unsigned,则unsigned char 型变量的取值范围 ...
- AS3中的强制类型转换
转自http://www.zhuoqun.net/html/y2007/654.html 每一种编程语言都提供强制类型转换,允许你将某一种数据类型转换成另一种数据类型,AS3自然也不例外.但是虽然我编 ...
最新文章
- Python计算医疗数据训练集、测试集的对应的临床特征:训练集(测试集)的阴性和阳性的样本个数、连续变量的均值(标准差)以及训练测试集阳性阴性的p值、离散变量的分类统计、比率、训练测试集阳性阴性的p值
- 4.1.6 文件的基本操作
- WPF 使用MahApps.Metro UI库
- android支持色彩管理软件,安卓首家!OPPO全链路色彩管理系统亮相:全局支持10bit照片视频...
- 264编码基本概念 FFMpeg的解码流程
- 陌陌怎么发起群活动 陌陌群组发起群活动教程
- Gradle[1]gradle distZip时,增加目录信息到zip中
- Java迷宫代码,深度优先遍历
- 一个简单python爬虫的实现——爬取电影信息
- 大数据之_数据采集Flume_架构---Flume工作笔记004
- Github fork其他项目的分支与主干保持同步
- 基于nvidia的ffmpeg编解码加速
- 蓝牙音乐之AVRCP常用指令介绍
- 阿里巴巴等大厂的 Java岗位要求是什么?
- try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行
- eval 是做什么的?
- oracle emp表不见了怎么办
- 面试轻松讲清楚 Java 面向对象的问题与知识(类与对象,封装,继承,多态,接口,内部类...)
- Vista系统安装优化备忘
- 高校实验室综合管理系统:建立一个安全、智慧、规范的实验室