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语言——表达式求值相关推荐

  1. C语言----表达式求值之隐式类型转换

    前言: 表达式求值的顺序一部分是由操作符的优先级和结合性决定. 同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型,称为隐式类型转换,下面给出隐式类型转换的详细讲解,希望对大家有所帮助~ 隐 ...

  2. c 语言表达式求值中缀变后缀,表达式求值关于中缀式转后缀式的问题!

    已结贴√ 问题点数:10 回复次数:6 表达式求值关于中缀式转后缀式的问题! 本人看资料的时候遇到一段代码,这段代码中转为后缀式的优先级那句不明白,请大神赐教,代码如下(c语言) #include # ...

  3. c语言表达式求值的空间复杂度,373-时间复杂度(表达式求值)

    题目链接:373-时间复杂度 在 ACM 里面,计算复杂度是一项非常重要的事情,常见的复杂度格式有三种: O(n) O(lg(n)) O(sqrt(n)) 一个算法往往有多种解法,每种解法的复杂度有上 ...

  4. C/C++ 语言中的表达式求值

    转载地址:http://www.cnblogs.com/heyonggang/p/3340301.html 在此,首先向裘老师致敬! 裘宗燕:C/C++ 语言中的表达式求值 经常可以在一些讨论组里看到 ...

  5. 基于栈的后缀表达式求值(洛谷P1449题题解,Java语言描述)

    题目要求 P1449题目链接 分析 给出后缀表达式求值,就相当于没了括号,而且很直接. 我们需要使用栈结构来完成任务. Java原装的栈使用了很多synchronized,导致性能不佳,但我们也就将就 ...

  6. 裘宗燕:C/C++ 语言中的表达式求值

    裘宗燕:C/C++ 语言中的表达式求值 经常可以在一些讨论组里看到下面的提问:"谁知道下面C语句给n赋什么值?" m = 1; n = m+++m++; 最近有位不相识的朋友发em ...

  7. c语言中缀表达式求值_[源码和文档分享]基于C++的表达式计算求值

    一.使用说明 1.1 项目简介 表达式求值是程序设计语言编译中的一个最基本的问题,就是将一个表达式转化为逆波兰表达式并求值.具体要求是以字符序列的形式从终端输入语法正确的.不含变量的整数表达式,并利用 ...

  8. C++基础知识:C++语言中的表达式求值

    经常可以在一些讨论组里看到下面的提问:"谁知道下面C语句给n赋什么值?" m = 1; n = m+++m++; 最近有位不相识的朋友发email给我,问为什么在某个C++系统里, ...

  9. 算术表达式求值(C语言栈)

    题目:算术表达式求值 题目描述:表达式计算是实现程序设计语言的基本问题之一,也是栈的应用的一个典型例子.设计一个程序,演示用运算符优先法对算数表达式求值的过程. 基本要求:以字符序列的形式从终端输入语 ...

最新文章

  1. 5.3 计算机网络传输层之TCP协议(tcp协议特点、tcp报文段首部格式、tcp连接---三次握手、tcp连接释放---四次握手)
  2. Redis 04_位图bitmap
  3. 16行代码AC_Keeping Rabbits Gym - 102394K(附超时原因)
  4. 基于ASP.NET MVC的ABP框架入门学习教程
  5. Direct2D教程(二)来看D2D世界中的Hello,World
  6. c# 声明类的时候初始化类_使用C#初始化的列表声明
  7. 【cocos2d-x 手游研发----目录】
  8. AdamOptimizer和随机梯度下降法SGD的区别
  9. SpringBoot接收数组参数
  10. [转载] 【全面总结】Tensorflow 2.0+与Keras的联系与应用(含model详解)
  11. 152位高校教师接龙晒工资,给打算入高校的博士们参考!
  12. kubernetes Pod驱逐机制
  13. 进制转换之2进制与16进制之间的相互转换
  14. RecyclerView让置顶项置顶
  15. java中输出一天每半个小时的时间段
  16. 关于大学生课余时间分配利用的调查报告
  17. 设计师收藏网站网址大全
  18. vue前端服务器端口_Vue前后端不同端口实现方案
  19. 手把手教你用Python搭建一个AI智能问答系统!
  20. 自适应网站怎么做好些?

热门文章

  1. php合并一维数组,PHP中一维数组的合并与去重的方法
  2. spring multipart
  3. 区块链结缘艺术产业,DIPChain如何构建分布式艺术生态?
  4. pom中配置maven仓库(阿里仓库)
  5. 国庆期间创作博文,获得国庆专属勋章
  6. 基于Python的图像分类-Finetune训练模型
  7. SSM三大框架+SpringMVC的工作原理及其流程
  8. 仍冀盼着能有缘相见,所以万有的实相
  9. 视频和投票|中国有哪些基于Ceph研发的存储 amp;amp; 闲聊Ceph amp;amp; 视频《开源世界里的SDS剖析》
  10. RTMPDump(libRTMP)源代码分析 2 解析RTMP地址——RTMP ParseURL