C语言—— 表达式求值

news2024/9/21 4:27:58

C语言—— 表达式求值

  • 一、隐式类型转换
  • 二、 整型提升
  • 三、 算术转换
  • 四、操作符的属性

表达式求值的顺序一部分是由操作符的 优先级和结合性决定。同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型。

一、隐式类型转换

C语言的整型算术运算总是至少以缺省整型类型的精度来进行的。为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。
整型提升的意义:
表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度
一般就是int的字节长度,同时也是CPU的通用寄存器的长度。因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长度。
通用CPU(general-purpose CPU)是难以直接实现两个8比特字节直接相加运算(虽然机器指令中可能有这种字节相加指令)。所以,表达式中各种长度可能小于int长度的整型值,都必须先转换为intunsigned int,然后才能送入CPU去执行运算。
那么如何进行整型提升呢?

二、 整型提升

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

//负数的整形提升
char c1 = -1;
//变量c1的二进制位(补码)中只有8个比特位:
1111111
//因为 char 为有符号的 char
//所以整形提升的时候,高位补充符号位,即为1
//提升之后的结果是:
11111111111111111111111111111111

正数的整型提升:

//正数的整形提升
char c2 = 1;
//变量c2的二进制位(补码)中只有8个比特位:
00000001
//因为 char 为有符号的 char
//所以整形提升的时候,高位补充符号位,即为0
//提升之后的结果是:
00000000000000000000000000000001

当无符号整型提升时,高位需要进行补0.
例1:

#include <stdio.h>
int main()
{
	char a = 3;
	//因为3为正数,所以原码、反码、补码都相同,
	//所以3的二进制补码为00000000000000000000000000000011
	//又因为char类型只能存放1字节,所以要进行截断操作
	//截断后a的补码为:00000011
	char b = 126;
	//b的二进制补码为:00000000000000000000000001111111
	//截断后b的补码为:01111111
	char c = a + b;
	//a+b进行整型提升:
	//00000000000000000000000000000011
	//00000000000000000000000001111111
    //00000000000000000000000010000010
    //进行截断操作:
    //a+b的补码为:10000010
    //进行整型提升:11111111111111111111111110000010 ——补码
    //              11111111111111111111111110000001
    //              10000000000000000000000001111110 - 原码
	printf("%d", c);
	return 0;
}

打印结果:
在这里插入图片描述
例2:

int main()
{
	char c = 1;
	printf("%u\n", sizeof(c));
	printf("%u\n", sizeof(+c));
	printf("%u\n", sizeof(-c));
	return 0;
}

运行结果:
在这里插入图片描述

例2中的,c只要参与表达式运算,就会发生整形提升,表达式 +c ,就会发生提升,所以 sizeof(+c) 是4个字节.
表达式 -c 也会发生整形提升,所以 sizeof(-c) 是4个字节,但是 sizeof( c) ,就是1个字节.

三、 算术转换

如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类型,否则操作就无法进行。下面的层次体系称为寻常算术转换
在这里插入图片描述
算术转换由低向高转换。 如果某个操作数的类型在上面这个列表中排名较低,那么首先要转换为另外一个操作数的类型后执行运
算。
例1:

int main()
{
	int a = 3;
	float b = 4.5;
	printf("%f", a + b);
	return 0;
}

运行结果:
在这里插入图片描述

四、操作符的属性

复杂表达式的求值有三个影响的因素。
1. 操作符的优先级
2. 操作符的结合性
3. 是否控制求值顺序。

两个相邻的操作符先执行哪个?取决于他们的优先级。如果两者的优先级相同,取决于他们的结合性。
例:

//表达式的求值部分由操作符的优先级决定。
//表达式1
a*b + c*d + e*f

代码1在计算的时候,由于比+的优先级高,只能保证,的计算是比+早,但是优先级并不能决定第三个比第一个+早执行。*
所以表达式的计算机顺序就可能是:

a*b
c*d
a*b + c*d
e*f
a*b + c*d + e*f
//或者:
a*b
c*d
e*f
a*b + c*d
a*b + c*d + e*f

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

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

相关文章

通达信股票接口的开源性及兼容性好吗?

通达信股票接口的开源性及兼容性好吗&#xff1f;刚开始炒股的时候&#xff0c;我用同花顺mac版本&#xff0c;界面非常新鲜和简单&#xff0c;然后因为我的朋友是量化的&#xff0c;然后强烈建议使用通达信&#xff0c;小编觉得通达信的开源性及兼容性堪称完美。可以同时兼容&…

拉伯证券|突然崩了!传闻空袭,2000亿“果链”巨头暴跌

1月4日&#xff0c;“果链”龙头立讯精细开盘跳水&#xff0c;一度大跌近9%。到午间收盘&#xff0c;立讯精细股价跌8.38%&#xff0c;总市值为2055亿元。苹果概念股普跌&#xff0c;东山精细跌9.11%&#xff0c;舜宇光学科技跌9.18%、高伟电子跌7.82%、比亚迪电子跌4.30%。 消…

Linux操作系统(常见命令)学习笔记(1)

Linux管道命令 管道命令大致指的是将上次命令返回的结果交给下个命令处理 command1 | command2Linux文件目录指令 ls命令 # 列出当前文件夹下面的文件 ls -params&#xff1a;-a 列出所有文件&#xff0c;包括隐藏的文件-l 以列表的形式列出-h 将文件以/1024后的文件大小显示…

面试官:请实现Javascript发布-订阅模式

简介 发布-订阅模式又叫做观察者模式&#xff0c;他定义了一种一对多的依赖关系&#xff0c;即当一个对象的状态发生改变的时候&#xff0c;所有依赖他的对象都会得到通知。 回忆曾经 作为一名前端开发人员&#xff0c;给DOM节点绑定事件可是再频繁不过的事情。比如如下代码…

拉伯证券|港股站上“年线”,更有盘中暴涨160%!A股地产板块集体大涨

今天上午&#xff0c;A股首要指数涨跌互现&#xff0c;“地产链”股票团体大涨。 港股方面&#xff0c;恒生指数和恒生科技指数盘中双双站上年线&#xff0c;多头攻势微弱。 港股盘中再现异动个股&#xff0c;有港股盘中暴升约160%。 A股首要指数涨跌互现“地产链”股票团体大…

Web3中文|年终回顾:2022年加密市场六大黑天鹅

2022年对加密货币和NFT来说是一段艰难的旅程&#xff0c;随着市场情绪的普遍低迷以及加密寒冬的到来&#xff0c;Web3跌入谷底。 从rug pulls骗局到NFT价格大跌&#xff0c;再到加密交易所和对冲基金的崩溃&#xff0c;还有数十亿美元化为泡沫&#xff0c;政府部门的监管和刑事…

如何使用 LightningChart 创建 JavaScript 散点图?

LightningChart JS是一款高性能的JavaScript图标库&#xff0c;专注于实时数据可视化&#xff0c;以“快如闪电”享誉全球&#xff0c;是Microsoft Visual Studio数据展示速度最快的2D和3D图表制图组件&#xff0c;可实时呈现超过10亿数据点的海量数据。LightningChart .JS | 下…

网络舆情监测服务系统技术说明,日常网络舆情监测记录?

随着互联网快速发展&#xff0c;网络舆情监测服务系统技术可以实现对互联网信息的全面监控&#xff0c;具备敏感词监控、图片识别、预警推送、舆情浏览、综合分析、事件分析、小视频监测等功能。接下来TOOM舆情监测带您简单了解网络舆情监测服务系统技术说明&#xff0c;日常网…

云开发 | 云数据库的创建及其增删改查

前言 虽然说微信云开发开始收费了&#xff0c;不过使用起来确实方便&#xff0c;针对于数据量不大&#xff0c;轻量级的小程序应用来说&#xff0c;云开发包含云数据库、云函数、云存储这三大功能&#xff0c;使用云开发完全可以进行独立开发&#xff0c;甚至不需要依赖于后端。…

worepress 优化记录

关闭评论和头像禁用不必要的插件参加插件。背字根/WordPress小工具 - 码云 - 开源中国 (gitee.com)smalltool 文件夹上传到 /wp-content/plugins/smalltool 下使用缓存WP RocketWP火箭- 帮助提高页面加载速度并减少服务器负载。 高下载速度&#xff0c;反过来&#xff0c;降低了…

数据结构教程

数据结构教程数据结构数据结构与算法为什么要学习数据结构和算法&#xff1f;阅读本教程前&#xff0c;您需要了解的知识&#xff1f;常见的数据结构常用算法插入排序希尔排序归并排序随机机化快速排序双路快速排序三路排序算法排序算法衍生问题堆堆的基本存储堆的 shift up堆的…

DAISY : Linux 上可服务于视力缺陷者的福音

导读如果你是盲人或像我一样有视力障碍&#xff0c;你可能经常需要各种软硬件才能做到视觉正常的人们视之为理所当然的事情。这其中之一就是阅读的印刷图书的专用格式&#xff1a;布莱叶盲文&#xff08;Braille&#xff09;&#xff08;假设你知道怎样阅读它&#xff09;或特殊…

ThinkPHP 加载自定义扩展文件

很久没有用过TP了&#xff0c;自定义扩展文件怎么加载的都不太清楚了&#xff0c;重新捋一遍&#xff0c;记录一下。 ThinkPHP版本 ^6.1.0 目录 1.将自定义扩展文件放入extend 2.设置类文件命名空间 extend下直接是类文件&#xff0c;不需设置命名空间 有层级的类文件&…

回顾2022,展望2023

文章目录初来乍到为什么是CSDN期间期间文章新年愿望初来乍到 额(⊙﹏⊙)&#xff0c;要从何说起呢&#xff1f; 我看了一下&#xff0c;写这篇文章时正好是我来到CSDN这个大家庭的75天&#xff0c;对于我而言75天说长不长&#xff0c;说短也不短。75天相比于CSDN中的前辈们来…

SpringBoot+VUE前后端分离项目学习笔记 - 【10 Vue实现增删改查】

vue安装axios&#xff1a; npm i axios -S 前端代码 request.js封装 新建utils/request.js import axios from axiosconst request axios.create({baseURL: http://localhost:9090/,timeout: 5000 })// request 拦截器 // 可以自请求发送前对请求做一些处理 // 比如统一…

磷脂聚乙二醇葡萄糖 DSPE-PEG-Glucose简介;脂质体表面进行聚乙二醇修饰;DSPE-PEG-葡萄糖

中文名称 磷脂聚乙二醇葡萄糖 葡萄糖聚乙二醇磷脂 简称 DSPE-PEG-Glucose Glucose-PEG-DSPE 分子量 2000/3000/3400/40005000/10000 溶剂 溶于部分常规有机溶剂 存储条件 -20冷冻保存&#xff0c;惰性气体保护 结构式 化学…

JVM面试题详解系列——垃圾收集器详解

垃圾收集器 Serial 收集器&#xff08;GC日志标识&#xff1a;DefNew&#xff09; Serial&#xff08;串行&#xff09;收集器是最基本、历史最悠久的垃圾收集器了。大家看名字就知道这个收集器是一个单线程收集器了。 它的 “单线程” 的意义不仅仅意味着它只会使用一条垃圾…

Windows 卡顿问题整理

右键卡顿 1 开始&#xff0c;运行&#xff0c;输入regedit&#xff0c;打开注册表&#xff1b; 找到注注册表项&#xff1a;HKEY_CLASSES_ROOT/Directory/Background/shellex/ContextMenuHandlers 。 系统一般有 5 个 Key&#xff1a;留下 New&#xff0c;其他删除&#xff0c;…

统计大写字母-C语言实现

任务描述 本关任务&#xff1a;统计大写字母个数。 相关知识 视频1 初识文本处理之单词计数II — C 语言的逻辑运算符 逻辑运算符 C 语言定义了3个逻辑运算符&#xff0c;其表示方法及含义如下表所示。 逻辑运算C语言符号表示说明与&&双目运算符&#xff0c;若两个…

九 深度剖析数据在内存中的存储

目录 一.整形在内存中的存储 1.原码&#xff0c;反码&#xff0c;补码 &#xff08;1&#xff09;正数的原反补码 &#xff08;2&#xff09;负数的原反补码 2.大小端介绍 二.浮点型在内存中的存储 1.浮点型的存储 2.浮点型的读取 一.整形在内存中的存储 1.原码&#…