C语言——表达式求值
C语言——表达式求值
- 隐式类型转换
- 算术转换
C语言中,表达式求值的顺序一部分是由操作符的优先级和结合性决定
同时有些表达式的操作数在求值的过程中可能需要转换为其他类型
隐式类型转换
C的整型算术运算总是至少以缺省整型类型的精度来进行
为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升
整型提升的意义:
- 表达式的整型运算是在 CPU 的相应运算器件内执行,CPU 内整型运算 (ALU) 的操作数的字节长度一般是 int 的字节长度,也是 CPU 的通用寄存器的长度
- 若两个 char 类型相加,在 CPU 执行时要先转换为 CPU 内整型操作数的标准长度
- 通用 CPU (general-purpose CPU) 是难以直接实现两个 8 比特字节直接相加运算(机器指令中可能有这种字节相加指令),所以表达式中各种长度可能小于 int 长度的整型值,必须先转换为 int 或
unsigned int,然后送入 CPU 执行运算
如何进行整型提升
整形提升是按照变量的数据类型的符号位来提升的
负数的整形提升
负数整形提升的时候,高位补充符号位,即为 1
例:char c1 = -1
c1的二进制位(补码)中只有8个比特位:1111111
提升之后的结果:11111111111111111111111111111111
正数的整形提升
正数整形提升的时候,高位补充符号位,即为 0
例:char c2 = 1
变量c2的二进制位(补码)中只有8个比特位:00000001
提升之后的结果是:00000000000000000000000000000001
无符号整形提升
无符号整形提升的时候,高位补 0
算术转换
如果某个操作符的各个操作数属于不同的类型,那么其中一个操作数需转换为另一个操作数的类型,否则操作无法进行
long double |
double |
float |
unsigned long int |
long int |
unsigned int |
int |
上面的层次体系称为寻常算术转换
若某个操作数的类型在此列表中排名较低,运算时首先要转换为另外一个操作数的类型后再执行运算
C语言——表达式求值相关推荐
- C语言----表达式求值之隐式类型转换
前言: 表达式求值的顺序一部分是由操作符的优先级和结合性决定. 同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型,称为隐式类型转换,下面给出隐式类型转换的详细讲解,希望对大家有所帮助~ 隐 ...
- c 语言表达式求值中缀变后缀,表达式求值关于中缀式转后缀式的问题!
已结贴√ 问题点数:10 回复次数:6 表达式求值关于中缀式转后缀式的问题! 本人看资料的时候遇到一段代码,这段代码中转为后缀式的优先级那句不明白,请大神赐教,代码如下(c语言) #include # ...
- c语言表达式求值的空间复杂度,373-时间复杂度(表达式求值)
题目链接:373-时间复杂度 在 ACM 里面,计算复杂度是一项非常重要的事情,常见的复杂度格式有三种: O(n) O(lg(n)) O(sqrt(n)) 一个算法往往有多种解法,每种解法的复杂度有上 ...
- C/C++ 语言中的表达式求值
转载地址:http://www.cnblogs.com/heyonggang/p/3340301.html 在此,首先向裘老师致敬! 裘宗燕:C/C++ 语言中的表达式求值 经常可以在一些讨论组里看到 ...
- 基于栈的后缀表达式求值(洛谷P1449题题解,Java语言描述)
题目要求 P1449题目链接 分析 给出后缀表达式求值,就相当于没了括号,而且很直接. 我们需要使用栈结构来完成任务. Java原装的栈使用了很多synchronized,导致性能不佳,但我们也就将就 ...
- 裘宗燕:C/C++ 语言中的表达式求值
裘宗燕:C/C++ 语言中的表达式求值 经常可以在一些讨论组里看到下面的提问:"谁知道下面C语句给n赋什么值?" m = 1; n = m+++m++; 最近有位不相识的朋友发em ...
- c语言中缀表达式求值_[源码和文档分享]基于C++的表达式计算求值
一.使用说明 1.1 项目简介 表达式求值是程序设计语言编译中的一个最基本的问题,就是将一个表达式转化为逆波兰表达式并求值.具体要求是以字符序列的形式从终端输入语法正确的.不含变量的整数表达式,并利用 ...
- C++基础知识:C++语言中的表达式求值
经常可以在一些讨论组里看到下面的提问:"谁知道下面C语句给n赋什么值?" m = 1; n = m+++m++; 最近有位不相识的朋友发email给我,问为什么在某个C++系统里, ...
- 算术表达式求值(C语言栈)
题目:算术表达式求值 题目描述:表达式计算是实现程序设计语言的基本问题之一,也是栈的应用的一个典型例子.设计一个程序,演示用运算符优先法对算数表达式求值的过程. 基本要求:以字符序列的形式从终端输入语 ...
最新文章
- 5.3 计算机网络传输层之TCP协议(tcp协议特点、tcp报文段首部格式、tcp连接---三次握手、tcp连接释放---四次握手)
- Redis 04_位图bitmap
- 16行代码AC_Keeping Rabbits Gym - 102394K(附超时原因)
- 基于ASP.NET MVC的ABP框架入门学习教程
- Direct2D教程(二)来看D2D世界中的Hello,World
- c# 声明类的时候初始化类_使用C#初始化的列表声明
- 【cocos2d-x 手游研发----目录】
- AdamOptimizer和随机梯度下降法SGD的区别
- SpringBoot接收数组参数
- [转载] 【全面总结】Tensorflow 2.0+与Keras的联系与应用(含model详解)
- 152位高校教师接龙晒工资,给打算入高校的博士们参考!
- kubernetes Pod驱逐机制
- 进制转换之2进制与16进制之间的相互转换
- RecyclerView让置顶项置顶
- java中输出一天每半个小时的时间段
- 关于大学生课余时间分配利用的调查报告
- 设计师收藏网站网址大全
- vue前端服务器端口_Vue前后端不同端口实现方案
- 手把手教你用Python搭建一个AI智能问答系统!
- 自适应网站怎么做好些?
热门文章
- php合并一维数组,PHP中一维数组的合并与去重的方法
- spring multipart
- 区块链结缘艺术产业,DIPChain如何构建分布式艺术生态?
- pom中配置maven仓库(阿里仓库)
- 国庆期间创作博文,获得国庆专属勋章
- 基于Python的图像分类-Finetune训练模型
- SSM三大框架+SpringMVC的工作原理及其流程
- 仍冀盼着能有缘相见,所以万有的实相
- 视频和投票|中国有哪些基于Ceph研发的存储 amp;amp; 闲聊Ceph amp;amp; 视频《开源世界里的SDS剖析》
- RTMPDump(libRTMP)源代码分析 2 解析RTMP地址——RTMP ParseURL