类型转换和优先级

news2024/11/25 12:25:04

目录

一、表达式求值

二、隐式类型转换

                1、整型提升的意义

                2、如何进行整型提升(3个例子)

三、算术转换

四、操作符的属性

                1、优先级顺序表

                2、运算法则


一、表达式求值

表达式求值的顺序一部分是由操作符的优先级和结合性决定。

同样,有些表达式的操作数在求值的过程中可能需要转换为其它类型。

二、隐式类型转换

•C语言的整型算术运算总是至少以整型类型的精度来进行的。

•为了获取这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升,针对的是类型小于整型。(char、short)

代码演示:

代码解析: 根据整型提升,表达式中的字符和短整型操作数在使用之前被转换为普通整型,也就是说,a+b这个表达式在计算中,不会直接拿char类型的a和char类型的b进行计算,而是把a和b提升为整型,然后再相加,最后再把int类型的值放到c中。

1、整型提升的意义

表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度一般就是int的字节长度,同时也是CPU的通用寄存器的长度。

因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长度。

通用CPU(general-purpose CPU)是难以直接实现两个8比特字节直接相加运算(虽然机器指令 中可能有这种字节相加指令)。所以,表达式中各种长度可能小于int长度的整型值,都必须先转 换为int或unsigned int,然后才能送入CPU去执行运算。

2、如何进行整型提升呢?

整型提升是按照变量的数据类型的符号位来提升的。

例1:

代码解析:

3是整数,而整型为4个字节(32bit),所以3的二进制序列为00000000000000000000000000000011,因为a是char类型,只能存1个字节(8bit),所以a中存的01111111,同样地,对于127也是一样操作,所以b中存的是01111111。

根据整型提升,表达式中的字符和短整型操作数在使用之前被转换为普通整型,所以接下来对a和b分别进行整型提升,由于整型提升是按照变量的数据类型的符号位来提升的,所以对于a来说,它的符号位是0,补满32bit(int是4个字节),a:00000000000000000000000000000011,对于b来说,它的符号位同样是0,所以b:000000000000000000000000011111111。接着对整型提升后的二进制序列相加(二进制相加为2就要余0进1),相加后结果为:000000000000000000000000010000010。

又因为c是char类型,只能存1个节(8bit),所以c中存的二进制序列为:10000010,由于最后要以十进制的整数打印出来,所以还要对它c进行整型提升,因为c的符号位为1,所以提升整型后就为:11111111111111111111111110000010(补码),因为内存中存储的是补码,最后把它转化成原码(减一,符号位不变再取反):10000000000000000000000001111110,所以结果为-126

例2:

代码解析:因为a和b的类型都是小于int类型的,所以它们都会发生整型提升。对于a,它的二进制序列为:10110110,对于b,它的二进制序列为1011011000000000。然而它们的符号位都是1,所以补的都是1,最后肯定不一样,而c的类型就是int,不需要整型提升,所以最后会打印c。

例3:

代码解析: 首先第一个是计算char类型所占用空间的字节数,毫无疑问就是1

第二个和第三个都要进行整型提升,因为+和-是操作符,所以+a和-a都是表达式。只要参与表达式计算,就要发生整型提升。提升为int类型,而int类型就是4个字节。

三、算术转换

•小于整型会发生整型提升,而大于等于整型的则会发生算术转换。

如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类型,否则操作就无法进行。下面的层次体系称为算术转换。


从上到下层级依次降低

long double

double

float

unsigned long int

long int

unsigned int

int

如果某个操作数的类型在上面的排名中较低的话,首先要转换为另一个操作数的类型后执行运算。

例如:

int a = 3;
float b = 3.14;
//要计算a + b
a + b;

a是int,b是float,它们的类型都大于等于整型,所以在计算的时候,由于a的层级比b低,所以需要把a的类型向float转换。

警告⚠:
算术转换需要合理,要不然会又一些潜在的问题。
就好比如:

float a = 3.14;

int b = a;

float要赋给int类型,如果不强制类型转换,也是会发生隐式转换,但是会有精度丢失,且编辑器会报警,但不会报错。

四、操作符的属性

复杂表达式的求值有三个影响的因素

1. 操作符的优先级

2. 操作符的结合性

3. 是否控制求值顺序。

1、操作符的优先级

C语言中优先级顺序表

2、运算法则

两个相邻的操作符先执行哪个?取决于它们的优先级

如果两者的优先级相同,取决于他们的结合性(匹配规则)。

例如:

 从左往右看,*与+是相邻的,根据优先级先算*,接着再看+和/,根据优先级先算/,最后再算+。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/90586.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ Reference: Standard C++ Library reference: Containers: map: map: swap

C官网参考链接&#xff1a;https://cplusplus.com/reference/map/map/swap-free/ 函数模板 <map> std::swap (map) template <class Key, class T, class Compare, class Alloc> void swap (map<Key,T,Compare,Alloc>& x, map<Key,T,Compare,Alloc…

融捷能源携手企企通,打造智能化、数字化采购平台

随着全球能源危机和环境污染问题日益突出&#xff0c;节能、环保有关行业的发展被高度重视&#xff0c;全球能源消费结构正向低碳化转型&#xff0c;加快发展可再生能源已经在全球范围内形成共识。 作为新能源产业的核心&#xff0c;锂电池技术和产业的发展也备受关注&#xff…

中断线程化

中断线程化 中断处理程序包括上半部硬件中断处理程序&#xff0c;下半部处理机制&#xff0c;包括软中断、tasklet、workqueue、中断线程化。 当一个外设中断发生后&#xff0c;内核会执行一个函数来响应该中断&#xff0c;这个函数通常被称为中断处理程序或中断服务例程。 上…

G631两级电液伺服阀控制器

G631系列两级电液伺服阀在电气液压伺服系统中作为执行元件&#xff0c;在伺服系统中液压执行机构同电气及气动执行机构相比&#xff0c;具有快速性好、单位重量输出功率大、传动平稳、抗干扰能力强等特点。另一方面&#xff0c;在伺服系统中传递信号和校正特性时多用电气元件。…

数据结构---散列表

散列表哈希函数散列表读写写读扩容总结散列表也叫作 哈希表&#xff08;hash table&#xff09;&#xff0c;这种数据结构提供了键&#xff08;Key&#xff09;和值&#xff08;Value&#xff09;的映射关系。只要给出一个Key&#xff0c;就可以高效查找到它所匹配的Value&…

如何使用HTML制作个人网站(如何搭建个人博客)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

Datawhale 202212 设计模式 | 第二章 23种设计模式

23种设计模式讲解策略模式问题&#xff1a;解决方案&#xff1a;效果&#xff1a;适用场景&#xff1a;实际应用&#xff1a;优点缺点&#xff1a;实例&#xff1a;装饰 6问题&#xff1a;解决方案&#xff1a;效果&#xff1a;代理 7问题&#xff1a;解决方案&#xff1a;效果…

(附源码)springboot球鞋文化交流论坛 毕业设计 141436

目 录 摘要 1 1 绪论 1 1.1 研究意义 1 1.2研究方法 1 1.3论文结构与章节安排 1 2 球鞋文化交流论坛分析 3 2.1 可行性分析 3 2.2 系统流程分析 3 2.2.1数据增加流程 3 2.3.2数据修改流程 4 2.3. 数据删除流程 4 2.3 系统功能分析 4 2.3.1 功能性分析 4 2.3.2 非功能性分析 5 …

【MySQL】说透锁机制(二)行锁 加锁规则 之 范围查询(你知道会锁表吗?)

本文会按照 聚集集索->唯一索引->普通索引 的顺序 地毯式分析 范围查询中 <、<、>、> 的行锁情况&#xff0c;锁表分析在唯一索引 章节&#xff0c;万字长文&#xff0c;力求分析全面&#xff0c;很硬核全网独一份&#xff0c;别忘了收藏&#xff01; 当然如…

中学课程辅导杂志中学课程辅导杂志社中学课程辅导编辑部2022年第34期目录

教育视点《中学课程辅导》投稿&#xff1a;cn7kantougao163.com 基于整体英语教学理念的初中英语读写课研究 徐杰; 3-5 初中语文阅读教学的有效追问策略 徐生; 6-8 初中音乐教学中融入美育的实践探讨 张静; 9-11 “让学引思”理念下的初中物理高效课堂构建 张敏…

部署Neo4j +Rasa+Rasa UI

一、前言 最近在学习kbqa&#xff0c;调研时发现gitee上有关于多轮对话系统源码&#xff0c;该仓库主要是基于rasa框架&#xff08;python语言&#xff09;实现&#xff0c;并且带有web的UI配置&#xff0c;相当于比较全面的对话平台。Rasa UI 可以基于客户已有的平台&#xf…

西电雨课堂测试大合集【导航】

文章目录基础写作 一、二科学道德与学风研究生的压力与心理健康学术规范与论文写作中国传统文化✨感谢各位博主的分享&#xff01; &#x1f4d2;我在这里只是进行了一些整理&#xff0c;方便大家查找。 ⚠️大家看完可以给博主们点点赞、收藏、关注。&#x1f601; 祝各位学业…

Linux机器安装Nginx配置并实现双向认证

Linux机器安装Nginx配置并实现双向认证 一.Nginx的安装配置 Nginx(“engine x”)是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器&#xff0c;也是一个 IMAP/POP3/SMTP 代理服务器。 在高连接并发的情况下&#xff0c;Nginx是Apache服务器不错的…

TiDB | TiDB在5A级物流企业核心系统的应用与实践

TiDB在5A级物流企业核心系统的应用与实践前言一、业务背景科捷物流概况神州金库简介二、现状与挑战神州金库现有技术体系业务挑战应对方案三、TiDB解决方案测试迁移收益问题四、说在最后前言 历经了近半年的测试验证和迁移准备&#xff0c;神州金库3.0核心系统 WMS 正式从 MyS…

力扣(LeetCode)152. 乘积最大子数组(C++)

序列dp f[i]f[i]f[i] 表示以 iii 结尾的连续子数组的最大乘积&#xff0c;d[i]d[i]d[i] 表示以 iii 结尾的连续子数组的最小乘积 。 如果只有正数&#xff0c;我们只需要考虑最大乘积 f[i]f[i]f[i] &#xff1b;有负数&#xff0c;需要考虑与负数相乘的数&#xff0c;越小越好…

【unity】基础交互入门(碰撞交互事件OnTriggerEnter和OnCollisionEnter)

一、碰撞交互事件OnTriggerEnter 1、在场景中添加两个几何体&#xff08;例如Cube和Sphere&#xff09; 2、添加Rigidbody&#xff08;刚体&#xff09;component 点击Cube&#xff08;正方体&#xff09;对象&#xff0c;在面板找到这个按钮&#xff0c;添加component 搜索…

Zabbix6.0使用教程 (五)—zabbix从二进制包安装上篇

大家好&#xff0c;我是乐乐。上一期我们已经讲过从源代码安装zabbix&#xff0c;本期着重讲从二进制包安装zabbix。 当我们在ZABBIX官方存储库可以看到&#xff0c;Zabbix SIA 提供如下官方RPM和DEB包&#xff1a; Red Hat Enterprise Linux/CentOS Debian/Ubuntu/Raspbian …

即时通讯音视频开发编码H.264的特点与优势

即时通讯应用中的实时音视频技术&#xff0c;几乎是IM开发中的最后一道高墙。原因在于&#xff1a;实时音视频技术 音视频处理技术 网络传输技术 的横向技术应用集合体&#xff0c;而公共互联网不是为了实时通信设计的。 国际上制定视频编解码技术的组织有两个&#xff0c;一…

[附源码]Python计算机毕业设计SSM基于Java的运动健身平台(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

博客网页设计制作 简单静态HTML网页作品 DIV CSS个人网页作业成品 dreamweaver学生个人博客网站模板

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…