C语言操作符详解(三)

一、表达式求值

1.1整型提升

C语言中整型算术运算总是至少以缺省整型类型的精度来进行的。
为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。

如何进行整型提升呢?

1. 有符号整数提升是按照变量的数据类型的符号位来提升的。
2. 无符号整数提升,高位补0。

负数的整型提升:

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

正数的整型提升:

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

1.2算数转换

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

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

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

1.3问题表达式

例如a*b+c*d+e*f

我们只能保证*比+的优先级高,所以他的计算顺序可能是:

1.a*b

2.c*d

3.a*b+c*d

4.e*f

5.a*b+c*d+e*f

也可能是:

1.a*b

2.c*d

3.e*f

4.a*b+c*d

5.a*b+c*d+e*f

如果遇到别的表达式,那么答案就可能产生歧义,例如:

c + --c;

我们只知道自减--的运算早+的运算之前,但我们并不知道+操作符的左操作数的获取在右操作数之前还是之后求值,所以结果是不可预测的。

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

在不同编译器中,答案并不相同。

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

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

相关文章

不入耳开放式耳机哪个品牌好?2024年热销榜前五名品牌推荐

为何开放式耳机近年来如此火爆?首先,开放式耳机以其开放式的声学设计,打破了传统耳机的局限,为用户带来了更加自然、宽广的音质体验。其次,随着音乐文化的普及和人们对高品质生活的追求,开放式耳机作为高端…

QSettings保存配置信息,读取配置信息

保存配置 QSettings setting("config.ini",QSettings::IniFormat); setting.beginGroup("para"); setting.setValue("database","test"); setting.setValue("hostName","localhost"); setting.setValue("us…

PHP 转换HTML 为节点数组 ,可用于uni-app的rich-text渲染

在Web开发中,HTML文档的结构和内容往往需要通过编程方式进行操作和解析。PHP DOMDocument类是一个强大的工具,可以将HTML转换为可操作的对象结构,本文将介绍一下使用PHP的DOMDocument类将HTML转换为节点数组的过程。htmlToNodes函数将HTML字符…

4.9学习总结

一.File类 (一).概述: File 类的对象代表操作系统的文件(文件、文件夹),File 类提供了诸如:创建文件对象代表文件,获取文件信息(大小、修改时间)、删除文件、创建文件(文件夹)等功…

HarmonyOS开发实例:【数字管家app】

一.概述 本应用是基于RK3399开发板,使用OpenHarmony3.1-Release开发的应用。通过OpenHarmony的分布式技术,使多人能够一起画画。 1.应用运行效果图: 2.分布式画板使用示意图 如上图所示,用户1、用户2在各自本地端进行…

Stack_经典例题_最小栈

题目: 题目分析: 在满足栈的特点的同时,还需要设计一个接口,就是获取栈内的最小元素! 解题思路: 因为是栈,所以不好遍历的!所以这题的方式不能采用遍历的方式,如果采取…

在FMCOS CPU卡上建立简单的测试PBOC支付环境

本文目的在于快速搭建一个简易的支付环境,方便进行电子钱包的圈存、消费测试。因此省略了许多数据文件及安全机制。 请勿将这个测试支付环境应用在生产系统中,否则可能带来极大的安全隐患。 建立简易的测试PBOC支付环境 在根目录(3F00&…

C#使用Exchange Web服务(/EWS/exchange.asmx)发送邮件

使用Exchange Web服务发送邮件 发送代码,Mail类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Security.Cryptography.X509Certificates; using System.Net; using System.Net.Security; using Microsof…

C++中的异常机制

1.异常是什么? 在 C 中,异常处理是一种用于处理程序运行时可能发生的错误或异常情况的机制。当某些异常情况发生时,程序可以通过抛出异常来通知调用栈,并且可以通过异常处理代码来捕获和处理这些异常。 2.检测异常的三个步骤 检查…

分布式锁-redission可重入锁原理

5.3 分布式锁-redission可重入锁原理 在Lock锁中,他是借助于底层的一个voaltile的一个state变量来记录重入的状态的,比如当前没有人持有这把锁,那么state0,假如有人持有这把锁,那么state1,如果持有这把锁的…

DELL VMWare R730 R740 R750 iDRAC配置与ESXI安装部署

VMware vCenter Server与ESXI版本兼容对照表 ESXI下载 VMware vcenter7.0许可证 Esxi7.0许可证 VSAN 7.0许可证 DELL VMWare R730 R740 R750 iDRAC配置与ESXI安装部署 vmware vcenter server 7.0 安装教程 1. 进入BIOS界面配置iDRAC网络 开机按F10,开机点击F10选择…

国家统计局行政区划获取及入库ES实践

我们先看下最终效果: 1. ES索引新建 PUT administrative_division {"mappings": {"properties": {"province": {"type": "keyword"},"province_code": {"type": "keyword"},&q…

docker安装oracle

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…

C++从入门到精通——类和对象(中篇)

1. 类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数。 class Date {}; 2. 构造函数 2.1 概念 对于以下的日期类&am…

ChatGPT写作攻略:打造精彩论文的秘诀

ChatGPT无限次数:点击直达 ChatGPT写作攻略:打造精彩论文的秘诀 在当今信息爆炸的时代,人们对于高质量且引人入胜的文章需求日益增长。作为一名具有10年经验的CSDN网站原创文章优质创作者,我们不仅要拥有丰富的知识储备和写作技巧&#xff0…

Linux下使用C语言实现高并发服务器

高并发服务器 这一个课程的笔记 相关文章 协议 Socket编程 高并发服务器实现 线程池 使用多进程并发服务器时要考虑以下几点: 父进程最大文件描述个数(父进程中需要close关闭accept返回的新文件描述符)系统内创建进程个数(与内存大小相关)进程创建过多是否降低整体…

AI电商图制作解决方案助力企业高效营销

电商行业蓬勃发展,一张吸睛的电商海报或宣传视频往往能够成为企业吸引顾客、提升品牌形象的利器。然而,传统电商图制作流程繁琐,需要投入大量时间和人力资源,成为众多企业面临的难题。为了解决这一问题,美摄科技凭借其…

前端学习之路-项目实战(1)

每日吐槽:有一个奇怪的问题,怎么一眼看出一个求职者是否是培训班出来的,有的求职上写着,希望大家坦诚一点,but,你这艘诚实的泰坦尼克号终究还是撞上了社会阴暗面的冰山,OMG,不让包装…

Leetcode 239. 滑动窗口最大值和Leetcode 347. 前 K 个高频元素

目录标题 Leetcode 239. 滑动窗口最大值题目描述C语言代码和题解解题思路 Leetcode 347. 前 K 个高频元素题目描述C语言题解和思路解题思路 Leetcode 239. 滑动窗口最大值 题目描述 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最…

Tensorflow(GPU版本配置)一步到位!!!

Tensorflow(GPU版本配置)一步到位!!! CUDA安装CUDA配置Tensorflow配置常见的包 CUDA安装 配置了N次的Tensorflow–Gpu版本,完成了踩坑,这里以配置Tensorflow_gpu 2.6.0为例子进行安装 以下为ten…