表达式(C语言)

news2024/11/29 2:37:10

目录

表达式求值

整型提升

​编辑整型提升的意义

如何进行整体提升?

算术转换

问题表达式解析

表达式1

表达式2

表达式3

表达式4

表达式5

总结


表达式求值

整型提升

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

为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	char a = 3;//00000011
	char b = 127;//01111111
	char c = a + b;//b和c的值被提升为普通整型,然后执行加法计算,存储于a中
	printf("%d", c);//10000010
	return 0;
}
整型提升的意义

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

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

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

如何进行整体提升?

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

2.无符号整数提升,高位补0

算术转换

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

long double
double
float
unsigned long int
long int 
unsigned int
int

如果某个操作数的类型在上面这个列表中排名靠后,那么首先要转换为另一个操作数的类型后执行运算

问题表达式解析

表达式1
a*b+c*d+e*f

表达式的计算顺序就可能是:

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
表达式2
c + --c;

--的优先级比+高,但是c的值不能确定是--前还是--后,在不同的编译器下算出不同结果

表达式3
int main()
{
	int i = 10;
	i = i-- - --i * (i = -3) * i++ + ++ i;
	printf("%d", i);
	return 0;
}

表达式4
int fun()
{
	static int count = 1;
	return ++count;
}
int main()
{
	int answer;
	answer = fun() - fun() * fun();
	printf("%d", answer);
	return 0;
}

先调用哪个fun不确定

表达式5
int main()
{
	int i = 1;
	int ret = (++i) + (++i) + (++i);
	printf("%d\n", ret);//12...
	printf("%d", i);//4
	return 0;
}
总结

即使有了操作符的优先级和结合性,我们写出的表达式依然有可能不能通过操作符的属性确定唯一的计算路径,那么这个表达式就是存在风险的,建议不要写出特别复杂的表达式

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

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

相关文章

C++: 类的简单介绍(三)———构造函数的初步认识

概念&#xff1a; 构造函数是一个特殊的成员函数&#xff0c;名字与类名相同,创建类类型对象时由编译器自动调用&#xff0c;以保证 每个数据成员都有 一个合适的初始值&#xff0c;并且在对象整个生命周期内只调用一次 需要注意的是&#xff0c;构造函数虽然名称叫构造&…

多线程编程4——线程安全问题

一、线程之间是并发执行的&#xff0c;是抢占式随机调度的。 多个线程之间是并发执行的&#xff0c;是随机调度的。我们只能确保同一个线程中代码是按顺序从上到下执行的&#xff0c;无法知道不同线程中的代码谁先执行谁后执行。 比如下面这两个代码&#xff1a; 代码一&…

接口性能优化常见12式

目录 1.批处理 2.异步处理 3.空间换时间 4.预处理 5.池化思想 6.串行改并行 7.索引 8.避免大事务 9.优化程序结构 10.深分页问题 11.SQL优化 12.锁粒度避免过粗 1.批处理 批量思想&#xff1a;批量操作数据库&#xff0c;这个很好理解&#xff0c;我们在循环插入场…

GSM-TRIAL-21.04.9-VMware-Workstation.OVA安装教程,GreenBone虚拟机安装教程

将GSM-TRIAL-21.04.9-VMware-Workstation.ova用VMware打开 先设置好网络和内存&#xff1a; 1、打开虚拟机&#xff0c;显示&#xff1a;你的GSM还不能完全正常工作。您想现在完成设置吗? 点击yes 2、创建用户&#xff0c;一会儿登录网页要用&#xff0c;点击yes 3、创建用户…

提升网站性能的秘诀:为什么Nginx是高效服务器的代名词?

在这个信息爆炸的时代&#xff0c;每当你在浏览器中输入一个网址&#xff0c;背后都有一个强大的服务器在默默地工作。而在这些服务器中&#xff0c;有一个名字你可能听说过无数次——Nginx。今天&#xff0c;就让我们一起探索这个神奇的工具。 一、Nginx是什么 Nginx&#x…

Zoho Mail 2023:回顾过去,展望未来:不断进化的企业级邮箱解决方案

当我们告别又一个非凡的一年时&#xff0c;我们想回顾一下Zoho Mail如何融合传统与创新。我们迎来了成立15周年&#xff0c;这是一个由客户、合作伙伴和我们的敬业团队共同庆祝的里程碑。与我们一起回顾这段旅程&#xff0c;探索定义Zoho Mail历史篇章的敏捷性、精确性和创新性…

分布式搜索引擎_学习笔记_3

分布式搜索引擎03 0.学习目标 1.数据聚合 **聚合&#xff08;aggregations&#xff09;**可以让我们极其方便的实现对数据的统计、分析、运算。例如&#xff1a; 什么品牌的手机最受欢迎&#xff1f;这些手机的平均价格、最高价格、最低价格&#xff1f;这些手机每月的销售…

各品牌主板快速启动热键对照表及CMOS进入方法

各品牌主板快速启动热键对照表 主板品牌 启动按键 笔记本品牌 启动按键 主机品牌 启动按键 华硕主板 F8 联想笔记本 F12 联想台式机 F12 技嘉主板 F12 宏碁笔记本 F12 惠普台式机 F12 微星主板 F11 华硕笔记本 ESC 宏碁台式机 F12 梅捷主板 F9 惠普笔…

光伏设计系统都具备哪些功能?

随着可再生能源的日益重要&#xff0c;光伏能源已成为我们能源结构中的重要组成部分。而光伏设计系统作为实现光伏能源高效利用的关键&#xff0c;其功能也日益丰富和多样化。本文将探讨光伏设计系统所具备的主要功能。 1.数据分析与模拟 光伏设计系统能够对大量的数据进行分…

iOS 文件分割保存加密

demo只是验证想法&#xff0c;没有做很多异常处理 默认文件是大于1KB的&#xff0c;对于小于1KB的没有做异常处理demo中文件只能分割成2个&#xff0c;可以做成可配置的N个文件分割拼接还可以使用固定的二进制数据&#xff0c;拼接文件开头或结尾 不论哪种拼法&#xff0c;目的…

InfluxDB数据的导入导出

Background influxdb支持将时序数据导出到文件&#xff0c;然后再将文件导入到数据库中&#xff0c;以此实现数据的迁移。 1、数据导出 语法&#xff1a; 示例&#xff1a; influx_inspect export -datadir "/var/lib/influxdb/data" -waldir "/var/lib/influ…

Django中的模板

目录 一:基本概念 二&#xff1a;模板继承 在Django中&#xff0c;模板是用于呈现动态内容的HTML文件。它们允许你将动态数据与静态模板结合起来&#xff0c;生成最终的HTML页面。 Django模板使用特定的语法和标签来插入动态内容。你可以在模板中使用变量、过滤器和标签来控…

Java技术栈 —— Hadoop入门(二)实战

Java技术栈 —— Hadoop入门&#xff08;二&#xff09; 一、用MapReduce对统计单词个数1.1 项目流程1.2 可能遇到的问题1.3 代码勘误1.4 总结 一、用MapReduce对统计单词个数 1.1 项目流程 (1) 上传jar包。 (2) 上传words.txt文件。 (3) 用hadoop执行jar包的代码&#xff0c;…

【Leetcode 514】自由之路 —— 动态规划

514. 自由之路 电子游戏“辐射4”中&#xff0c;任务 “通向自由” 要求玩家到达名为 “Freedom Trail Ring” 的金属表盘&#xff0c;并使用表盘拼写特定关键词才能开门。 给定一个字符串ring&#xff0c;表示刻在外环上的编码&#xff1b;给定另一个字符串key&#xff0c;表…

Linux 驱动开发基础知识——总线设备驱动模型(八)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;Vir2021GKBS &#x1f43c;本文由…

unity WebGL发布游戏生成WebGL

1.unty Hub中安装WEBGL支持 2.项目平台的切换 color space需要根据项目选择 ColorSpace&#xff0c;是指玩家设置的颜色空间。 伽马颜色空间是历史悠久的标准格式&#xff0c;但线性颜色空间渲染可提供更精确的结果。 具体区别&#xff1a;ColorSpace 3.由于没有自己服务器…

Zookeeper分布式锁实战

目录 什么是分布式锁&#xff1f; 基于数据库设计思路 基于Zookeeper设计思路一&#xff08;非公平锁&#xff09; 基于Zookeeper设计思路二&#xff08;公平锁&#xff09; Curator可重入分布式锁 Curator可重入分布式锁工作流程 什么是分布式锁&#xff1f; 在单体的应…

无参考图像质量客观评估指标

文章目录 前言一、基于感知的图像质量评估器&#xff08;Perception based Image Quality Evaluator&#xff0c;PIQE&#xff09;二、盲/无参考图像空间质量评估器&#xff08;Blind/Referenceless Image Spatial Quality Evaluator&#xff0c;BRISQUE&#xff09;三、自然图…

C语言实战项目<贪吃蛇>

我们这篇会使用C语言在Windows环境的控制台中模拟实现经典小游戏贪吃蛇 实现基本的功能&#xff1a; 结果如下: 1.一些Win32 API知识 本次实现呢我们会用到一些Win32 API的知识(WIN32 API也就是Microsoft Windows 32位平台的应用程序编程接口): 1)控制窗口大小 我们可以使用…

【算法】Partitioning the Array(数论)

题目 Allen has an array a1,a2,…,an. For every positive integer k that is a divisor of n, Allen does the following: He partitions the array into n/k disjoint subarrays of length k. In other words, he partitions the array into the following subarrays: [a1,…