类型转换、强制类型转换
目录
- 一、类型转换
- 二、隐式类型转换
- 三、算术转换
- 四、降级
- 五、强制类型转换
一、类型转换
有些表达式的操作数在求值的过程中需要先转换成其他类型再进行运算,这一操作称为数据类型转换。
有些人会问,为什么char类型也可以进行算数运算?
一方面char也是根据ascii表的对应数据存储的,
另一方面使用char类型运算时,char会被升级为int类型。
二、隐式类型转换
在C语言中,许多类型转换都是自动进行的,当char、shot类型出现在表达式里或作为函数的参数时(函数原型除外),都会被升级为int类型。
通常在语句和类型表达式中应使用类型相同的变量或常量,但是 如果使用的混合类型这种非我们本意的异常情况时,C程序并不会死掉或卡在那里,会根据规则进行自动类型转换(隐式),这是它的一个优点,但是这样也可能会导致程序容易出现非预料中的结果。
C的整形算数运算以至少是整形类型的精度来进行,(如果数据本身为更高精度,则以更高的精度来进行),为了获得这个精度,表达式中的字符型和短整形会被转换为普通类型,
这种转换称为 “整形提升” 或 “升级” 。
当在表达式中进行类型转换时,signed,unsigned,char,short int,都会被自动转换成int类型。
举例:
char a,b,c;
a = b+c;
分析:
b 和 c 将先被提升为普通整形,然后进行加法运算,加法运算的结果截取低8位,然后放到a中。假如,a = 250,b =180,最后 a 的结果为174。
解释:a+b结果为430,转换为16进制为1AE,截取8位AE,转换成十进制极为174。
举例:
a = (~a^b<<1)>>1;
由于存在求补和左移操作,8位的精度不够,也需要隐式类型转换。
三、算术转换
如果某个操作符的几个操作数属于不同的类型, 两个值会分别被转换成各自的更高级别,比如int 就会转换为long int。
然后再根据寻常 算术转换 的优先级,将一个操作数的类型转换为另一种操作数的类型。
这里会存在两次转换,一是隐式类型转换,二是算数转换。
寻常算术转换的优先级:
①long double
②double
③float
④unsigned long int
⑤long int
⑥unsigned int
⑦int
优先级转换的顺序为① -> ⑦ ,转换优先级从高到低。如果某个操作数的类型的优先级排名较低,它将被首先转换成另一个操作数的类型,然后执行计算。
四、降级
在赋值表达式语句中,计算结果会被转换成被赋值变量的类型,这一过程中可能会导致数据降级(即被部分截取)或升级。
在函数传参时,函数原型会自动升级,char,short int,都会被自动转换成int,float会被自动转换成double。
“降级”容易出现问题:低级的数据类型存放不下表达式的值。
举例:
如果在8位机上
int a,b;
short int c;
a = 25;
b = 30;
c = b+a;
c的结果为238,我们期望的结果为750。
思考 a+b之后的值,但是又没有赋值给c时存放在哪里,以什么类型存储?
五、强制类型转换
在写代码时应该尽量避免数据类型转换,如果需要进行精确的类型转换或者在程序中表明类型转换的意图,这时候就要用到强制类型转换。
强制类型转换:在某个变量前面放一个使用圆括号括起来的类型名。该类型是需要转换的目标类型。圆括号和它括起来的类型名构成了强制转换类型符。
定义为:
(type)
举例:
int data = 0;
data = 1.6+1.7;
data = (int)1.6 +(int)1.7;
第二行没有进行强制类型转换,第三行进行了强制类型装换,得到data的结果是不一样的
一个是3,一个是2。
类型转换、强制类型转换相关推荐
- 【C++基础语法 2】——类型转换[自动类型转换/强制类型转换]
2. 类型转换 2.1 C++转换方式 自动类型转换(隐式转换):遵循一定的规则,由编译系统自动完成 强制类型转换:把表达式的运算结果强制转换成所需的数据类型 C++自动执行很多类型的转换: 将一种算 ...
- C语言数据类型转换(自动类型转换 强制类型转换)
数据类型转换就是将数据(变量.数值.表达式的结果等)从一种类型转换为另一种类型. 自动类型转换 自动类型转换就是编译器默默地.隐式地.偷偷地进行的数据类型转换,这种转换不需要程序员干预,会自动发生. ...
- Java类型转换(自动类型转换+强制类型转换)
一. 自动类型转换(隐式类型转换) 整型.实型(常量).字符型数据可以混合运算.运算中,不同类型的数据先转化为同一类型,然后进行运算. 自动转换从低级到高级. 自动转换有以下规律: 1.小的类型自动转 ...
- Java 自动类型转换,强制类型转换
一. 自动类型转换[熟知] 举个例子,便于理解 public static void main(String[] args) {byte a = 20;int b = a;}java遵循类型匹配原则 ...
- C语言数据类型转换(自动类型转换+强制类型转换)
自动类型转换 自动类型转换就是编译器默默地.隐式地.偷偷地进行的数据类型转换,这种转换不需要程序员干预,会自动发生. 1)将一种类型的数据赋值给另外一种类型的变量时就会发生自动类型转换,例如 floa ...
- 基本数据类型转换 || 自动类型转换与强制类型转换
基本数据类型转换 自动类型转换 强制类型转换
- Java的知识点6—— 强制类型转换、基本类型转化时常见错误和问题、 简单的键盘输入和输出
强制类型转换 强制类型转换,又被称为造型,用于显式的转换一个数值的类型.在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出. public class Test2 {pu ...
- C语言基础教程之强制类型转换
C 强制类型转换 强制类型转换是把变量从一种类型转换为另一种数据类型.例如,如果您想存储一个 long 类型的值到一个简单的整型中,您需要把 long 类型强制转换为 int 类型.您可以使用强制类型 ...
- C语言基础专题 - 数据类型与强制类型转换(编辑中)
C语言 - 数据类型与强制类型转换 1.C数据类型 可以参考的相关知识链接: C语言基础专题 - 指针 C语言基础专题 - 数组 C语言基础专题 - 字符串 C语言基础专题 - 结构体 C语言基础专题 ...
- 一文了解Java强制类型转换
本专栏由十年Java开发经验专家编写,本专栏定位于Java基础知识,既适合新手入门又适合老鸟巩固基础知识.一共99节课,每节课只需几毛钱. 作者简介:笔名seaboat,擅长工程算法.人工智能算法.自 ...
最新文章
- nginx 修复固定链接404
- old DIB in res\*.ico
- 关于计算机网络的好坏处的英语作文,网购的好处和坏处英语作文带翻译
- Task Schedule
- collapse mode 严重_从泛化性到Mode Collapse:关于GAN的一些思考
- java doc转pdf_java 完美解决 ppt/pptx 转pdf 源码
- js变量提升_学习笔记:JS中的作用域和预解析
- 暴力打表之hdu 2089
- 经典排序算法(Java版)
- 一线Java架构师概括互联网公司的标准Java技术架构
- OpenShift 4 之 GitOps(6)用ArgoCD部署MongoDB主从集群
- python中的多进程与多线程(一)
- TP 打开 显示错误信息
- 百胜中国拟2025年前开1000家Lavazza咖啡店​;别样肉客开始陆续进驻中国山姆会员商店 | 知消...
- SSM框架医院信息管理系统-患者医生考勤管理挂号管理-病房管理-科室管理- (idea开发javaweb-php-asp.netC#-j2ee-springboot)
- 北京大学计算机视觉导师,北京大学信息科学技术学院林宙辰研究生导师介绍
- linux系统下u盘变成只读模式如何修改
- C#获取系统空闲时间
- 投资的N种认偏差总有款打败你
- 文华财经指标安装使用步骤,开多开空成功率95%公式指标多空买卖点信号