目录

  • 一、类型转换
  • 二、隐式类型转换
  • 三、算术转换
  • 四、降级
  • 五、强制类型转换

一、类型转换

有些表达式的操作数在求值的过程中需要先转换成其他类型再进行运算,这一操作称为数据类型转换。

有些人会问,为什么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。

类型转换、强制类型转换相关推荐

  1. 【C++基础语法 2】——类型转换[自动类型转换/强制类型转换]

    2. 类型转换 2.1 C++转换方式 自动类型转换(隐式转换):遵循一定的规则,由编译系统自动完成 强制类型转换:把表达式的运算结果强制转换成所需的数据类型 C++自动执行很多类型的转换: 将一种算 ...

  2. C语言数据类型转换(自动类型转换 强制类型转换)

    数据类型转换就是将数据(变量.数值.表达式的结果等)从一种类型转换为另一种类型. 自动类型转换 自动类型转换就是编译器默默地.隐式地.偷偷地进行的数据类型转换,这种转换不需要程序员干预,会自动发生. ...

  3. Java类型转换(自动类型转换+强制类型转换)

    一. 自动类型转换(隐式类型转换) 整型.实型(常量).字符型数据可以混合运算.运算中,不同类型的数据先转化为同一类型,然后进行运算. 自动转换从低级到高级. 自动转换有以下规律: 1.小的类型自动转 ...

  4. Java 自动类型转换,强制类型转换

    一. 自动类型转换[熟知] 举个例子,便于理解 public static void main(String[] args) {byte a = 20;int b = a;}java遵循类型匹配原则 ...

  5. C语言数据类型转换(自动类型转换+强制类型转换)

    自动类型转换 自动类型转换就是编译器默默地.隐式地.偷偷地进行的数据类型转换,这种转换不需要程序员干预,会自动发生. 1)将一种类型的数据赋值给另外一种类型的变量时就会发生自动类型转换,例如 floa ...

  6. 基本数据类型转换 || 自动类型转换与强制类型转换

    基本数据类型转换 自动类型转换 强制类型转换

  7. Java的知识点6—— 强制类型转换、基本类型转化时常见错误和问题、 简单的键盘输入和输出

     强制类型转换 强制类型转换,又被称为造型,用于显式的转换一个数值的类型.在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出. public class Test2 {pu ...

  8. C语言基础教程之强制类型转换

    C 强制类型转换 强制类型转换是把变量从一种类型转换为另一种数据类型.例如,如果您想存储一个 long 类型的值到一个简单的整型中,您需要把 long 类型强制转换为 int 类型.您可以使用强制类型 ...

  9. C语言基础专题 - 数据类型与强制类型转换(编辑中)

    C语言 - 数据类型与强制类型转换 1.C数据类型 可以参考的相关知识链接: C语言基础专题 - 指针 C语言基础专题 - 数组 C语言基础专题 - 字符串 C语言基础专题 - 结构体 C语言基础专题 ...

  10. 一文了解Java强制类型转换

    本专栏由十年Java开发经验专家编写,本专栏定位于Java基础知识,既适合新手入门又适合老鸟巩固基础知识.一共99节课,每节课只需几毛钱. 作者简介:笔名seaboat,擅长工程算法.人工智能算法.自 ...

最新文章

  1. Ubuntu终端字体颜色方案
  2. [deviceone开发]-日程日历示例
  3. batch_size 和 fetch_size作用
  4. 第三章:3.8 周期信号的傅里叶变换
  5. python自动化数据报告_如何:使用Python将实时数据自动化到您的网站
  6. 基于Udp的Socket网络编程
  7. 安卓系统dicom阅读器_麻雀虽小,体验倍儿好——文石 POKE2黑白屏/彩屏电纸书阅读器评测...
  8. nginx实现网站url带参跳转 POST请求GET请求跳转
  9. 2022跨年代码(有烟花)
  10. SoapUI接口测试实例(webservice接口)
  11. 领存工业级 3U VPX 8TB 存储模块性能参数
  12. python函数找钱_找钱问题–动态规划一例
  13. excel中图片链接利用宏VB转换为图片展示
  14. 谜底是计算机的谜语英语,有关英语谜语大全及答案
  15. 图解Redis中的9种数据结构(高级面试,必备)
  16. idea2020版本无法使用actiBPM插件问题
  17. 2019软件工程第三次作业
  18. ZSL (zero shutter lag)
  19. 解决Linux下PermissionDenied问题(给文件授权)
  20. 【微信小程序】日历弹窗选择器

热门文章

  1. vue3路由切换时的动画效果
  2. 北斗/GPS授时原理
  3. 尚硅谷-后台管理系统
  4. 尚硅谷在线教育十二:微信登录
  5. 页面布局基础——2.3
  6. VOWIFI--相关的协议文档
  7. 怎么能看出来一个人善不善良?
  8. sgu290:Defend the Milky Way(三维凸包)
  9. 基于开源WebSocket服务器宝贝鱼(CshBBrain)的应用横空出世
  10. 自动控制原理第4章——根轨迹法(思维导图)