c/c++基础 自增自减运算符 大白讲解i++/i--/++i/--i

后置运算符:i++表示在使用x之后,再使x的值加1,即i=i+1;

前置运算符:++i表示在使用x之前,先使x的值加1,即i=i+1.

前缀运算和后缀运算的区别:前缀运算是“先变后用”,而后缀运算是“先用后变”

i++和++i


这样看结果是一样的,还是没有区别,原因在于,x两次都是对自身使用了x,但实际当有其他变量、一个表达式内有其他运算时,情况就可能不太一样了。(以下详说)

一般实际使用时,在如此的单个i变量的for循环里使用两种自加都没有区别:


以上的举例都是i++和++i使用的结果相同的例子,可以看出:i都是自己使用自己,所以看不出二者有什么差别。

后置运算符:i++表示在使用x之后,再使x的值加1,即i=i+1;

前置运算符:++i表示在使用x之前,先使x的值加1,即i=i+1.

也就是说,他们一个是先用再+1,一个是先+1再用

这就像一盘菜的两个原料一样。“花生油炒西红柿”

如果不炒,只是将花生油和西红柿掺起来,那么,无论是先把西红柿放在碗里再放花生油还是先把花生油放到锅里再放西红柿,结果都是一样的:生西红柿泡在了生花生油里。

但是,如果再使用一个锅来炒它们。那么,先放西红柿还是先放花生油就会产生不一样的菜的味道。

在代码中,这个“锅”是什么呢?是a。

a=i++是先将i=1的值赋值给a,然后i=i+1,最后a的结果是1

a=++i是先i=i+1,此时,i=2,然后把i的值赋值给a,最后a是2

i--和--i

i--和--i与i++和++i是类似的情况,可参照前文进行理解

贪吃法则

++与- -是连体操作符: 如果分开写,则成两个独立的+或-了,所以中间不能有空格。如果有多于两个的+或-连写,则编译器按”贪吃法则“理解。所谓贪吃,是指只要能理解能成为操作符,就尽量多读入字符。

在C和C++语言中,++ 和 -- 操作符被称为自增和自减操作符。这些操作符在语法上是不可以分割的,也就是说,它们是"连体"的,中间不能有空格。

例如,如果你尝试写下这样的代码:

int x = 5;  
int y = ++ 5;  // 错误!不能这样写

编译器会报错,因为 ++ 和数字 5 被视为两个独立的符号,而不是一个合法的自增操作。

另外,您提到的"贪吃法则"也确实适用于C/C++语言。这是一种编译器在解析表达式时采取的策略,如果多个相同的运算符连在一起(比如两个或更多的 + 或 -),编译器会尝试尽可能多地将其解析为一个操作符。例如:

int z = + + - - 7; // 实际上是 (int) (+ (+ (-7))),结果为-7

在这个例子中,尽管有三个 + 和两个 -,但编译器将它们解析为两个 + 和两个 -,而不是四个独立的符号。这是因为 + + - - 在语法上是合法的,表示先对一个负数进行两次自增操作(使其变为正数),然后再进行两次自减操作(使其变为负数)。

对于连续的四五个 + 或 -,C/C++ 编译器仍然会尽量将它们解析为一个操作符。让我们来看几个例子:

  1. 连续的 +:

int a = + + + 5; // (int) (+ (+ (+ 5))),结果为5

这里,三个 + 被解析为一个自增操作符,所以 + + + 5 等同于 5++,最终结果是 5

2. 连续的 -:

int b = -- -- 5; // (int) ((5--), (5--)),结果为-5

这里,两个 - 被解析为自减操作符,所以 -- -- 5 等同于 5-- 和 5--,最终结果是 -5

3. 混合的 + 和 -:

int c = + - - + 7; // (int) ((+ (-7)), (+ (+7))),结果为

这里,两个 + 和两个 - 被解析为两个操作符:一个自增和一个自减。所以 + - - + 7 等同于 (+ (-7)) 和 (+ (+7)),最终结果是 7

所以,即使连续有四五个 + 或 -,编译器还是会尽可能地将它们解析为一个整体的操作符。这是由于C/C++语言的设计选择,以便更直观地表达复杂的操作。

 

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

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

相关文章

【idea】idea 开发快捷键

在Java开发中,有一些常用的快捷键和工具,可以提高开发效率。以下是一些常见的Java开发常用到的功能和快捷键: IDE快捷键: 格式化代码:Ctrl Alt L,会让代码更整齐,调整间距之类的 导入包&am…

第11课 利用windows API捕获桌面图像并通过FFmpeg分享

在上一章,我们已经实现了一对一音视频对话功能。在实际应用中,我们常需要把自己的电脑桌面分享给他人以实现桌面共享功能,这种功能在视频会议、在线教学等场景中很常见,这种功能如何实现呢?这节课我们就来解决这个问题…

单例模式---JAVA

目录 “饿汉”模式 完整代码 “懒汉”模式 完整代码 单例模式:保证某个类在程序中只存在唯一一份实例, 而不会创建出多个实例。 单例模式可以通过实例创建的时间来分为两种:“饿汉”和“懒汉”模式。 “饿汉”模式 所谓的“饿汉”模式实则就是在类…

用红葡萄酿造的白葡萄酒是怎样的?

“由黑变白”这是“黑葡萄”的直译,代表一种由深蓝到黑葡萄制成的白葡萄酒,这种酿酒方式起源于法国,黑皮诺和莫尼尔的红葡萄一直被加工成白葡萄酒,作为香槟的基础。这是可能的,因为红色浆果通常果肉较轻。红色素&#…

表分区管理

案例:--表分区-列表分区 --根据客户的省份分区,保存不通省份客户到不同的分区 CREATE table clients( id INTEGER primary key, name VARCHAR2(20), province VARCHAR2(20)) partition by list(province) ( partition shandong VALUES(山东省), …

【langchain】入门初探实战笔记(Chain, Retrieve, Memory, Agent)

1. 简介 1.1 大语言模型技术栈 大语言模型技术栈由四个主要部分组成: 数据预处理流程(data preprocessing pipeline)嵌入端点(embeddings endpoint )向量存储(vector store)LLM 终端&#xff…

*4.3 CUDA MEMORY TYPES

CUDA设备包含几种类型的内存,可以帮助程序员提高计算到全局内存的访问率,从而实现高执行速度。图4.6显示了这些CUDA设备内存。全局内存和恒定内存出现在图片的底部。主机可以通过调用API函数来写入(W)和读取(R&#xf…

Hadoop集群环境下HDFS实践编程过滤出所有后缀名不为“.abc”的文件时运行报错:java.net.ConnectException: 拒绝连接;

一、问题描述 搭建完Hadoop集群后,在Hadoop集群环境下运行HDFS实践编程使用Eclipse开发调试HDFS Java程序(文末有源码): 假设在目录“hdfs://localhost:9000/user/hadoop”下面有几个文件,分别是file1.txt、file2.tx…

python+playwright 学习-1.环境准备与快速开始

前言 说到 web 自动化,大家最熟悉的就是 selenium 了,selenium 之后又出现了三个强势的框架Puppeteer、CyPress、TestCafe, 但这3个都需要掌握 JavaScript 语言,所以只是少部分人在用。 2020年微软开源一个 UI 自动化测试工具 P…

【前端设计】文字聚光灯

欢迎来到前端设计专栏&#xff0c;本专栏收藏了一些好看且实用的前端作品&#xff0c;使用简单的html、css语法打造创意有趣的作品&#xff0c;为网站加入更多高级创意的元素。 案例 文字聚光灯效果可以用于网站标题 html <!DOCTYPE html> <html lang"en&quo…

书生·浦语第二次作业

我最近在参加书生浦语大模型实战营&#xff0c;这是第二次作业打卡&#xff01; 如果你也想两周玩转大模型微调&#xff0c;部署与测评全链路。报名链接&#xff1a;invite 书生浦语大模型实战营报名 邀请码可以填026014 1. 基础作业&#xff08;一&#xff09;&#xff1a;…

什么是检索增强生成 (RAG)

什么是 RAG RAG&#xff0c;即检索增强生成&#xff0c;是一种将预训练的大型语言模型的功能与外部数据源相结合的技术。这种方法将 GPT-3 或 GPT-4 等 LLM 的生成能力与专用数据搜索机制的精确性相结合&#xff0c;从而形成一个可以提供细微响应的系统。 本文更详细地探讨了…

QTDAY1

头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QIcon> #include <QLabel> #include <QMovie> #include <QLineEdit> #include <QPushButton> class Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *p…

探寻智能酒精壁炉在人类文化传承和精神需求中的重要意义

真火壁炉在人类文明中扮演着至关重要的角色&#xff0c;它不仅是温暖与照明的来源&#xff0c;更承载着人类的情感、记忆和文化传承。从古至今&#xff0c;真火壁炉一直都是家庭和社区聚集的焦点&#xff0c;象征着温暖、交流与家庭团聚。并且随着科技的进步&#xff0c;能使用…

SkyWalking介绍和Docker环境下部署

一、Skywalking概述 1、Skywalking介绍 Skywalking是分布式系统的应用程序性能监视工具&#xff0c;专为微服务&#xff0c;云原生架构和基于容器&#xff08;Docker&#xff0c;K8S,Mesos&#xff09;架构而设计&#xff0c;它是一款优秀的APM&#xff08;Application Perfo…

Halcon灰度的平均值和偏差intensity

Halcon灰度的平均值和偏差 intensity 算子用于计算单张图像上多个区域的灰度值的平均值和偏差。该算子的原型如下&#xff1a; intensity (Regions, Image ::: Mean, Deviation )其各参数的含义如下。 参数1&#xff1a;Regions&#xff08;输入参数&#xff09;&#xff0c;…

harmonyOS 时间选择组件(TimePicker)

本文 我们来说 TimePicker 时间组件 首先 我们搭一个最基本的组件骨架 Entry Component struct Index {build() {Row() {Column() {}.width(100%)}.height(100%)} }然后 在 Column 组件内 放一个 TimePicker进去 这里 我们就可以看到 一个时间的选择器了 DatePicker 捕获当前…

孪生神经网络MATLAB实战[含源码]

​一、算法原理 孪生神经网络&#xff08; Siamese neural network&#xff09;是一种深度学习网络&#xff0c;它使用两个或多个具有相同架构、共享相同参数和权重的相同子网。孪生网络通常用于寻找两个可比较事物之间的关系的任务。孪生网络的一些常见应用包括面部识别、签名…

node.js+mysql旅游景点分享网站-计算机毕业设计源码03796

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。旅游景点分享网站设计&#xff0c;主要的模块包括查看后台首页、轮播图&#xff08;轮播图管理&#xff09;、网站公告管理&#xff08;网站公告…

AQS 抽象队列同步器

AQS AQS &#xff08;抽象队列同步器&#xff09;&#xff1a; AbstractQueuedSynchronizer 是什么 来自jdk1.5&#xff0c;是用来实现锁或者其他同步器组件的公共基础部分的抽象实现&#xff0c;是重量级基础框架以及JUC的基石&#xff0c;主要用于解决锁分配给谁的问题整体…