【C++】单目操作符详解:前置与后置自增自减及正负号操作


在这里插入图片描述

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳]
本文专栏: C++

文章目录

  • 💯前言
  • 💯单目操作符概述
    • 1 自增与自减操作符:`++` 和 `--`
    • 2 前置 `++` 和 后置 `++`
      • 案例 1:前置 `++`
      • 案例 2:后置 `++`
      • 小技巧
    • 3 前置 `--` 和 后置 `--`
      • 案例 1:前置 `--`
      • 案例 2:后置 `--`
      • 小技巧
  • 💯正负号操作符:`+` 和 `-`
    • 案例分析
    • 负号的更多案例
  • 💯小结


在这里插入图片描述


💯前言

  • 在 C++ 编程语言中,单目操作符是至关重要的运算符类型,具有简洁且高效的特性,可以帮助程序员快速、直接地操作变量的值。单目操作符的掌握对于理解和精通 C++ 的内存和控制流管理至关重要。本次讨论中,我们将系统性地探讨 ++--+- 这四种常见的单目操作符的使用及其在不同场景中的作用。深入理解这些操作符的细微差异,不仅能够帮助程序员编写更具效率的代码,也能在复杂代码中避免由于误用而导致的逻辑错误
    C++ 参考手册
    在这里插入图片描述

💯单目操作符概述

在这里插入图片描述
前面所涉及的操作符大多为双目操作符,双目操作符是指具有两个操作数的运算符。然而,单目操作符只有一个操作数,且可以直接作用于变量,执行特定操作。C++ 中的常见单目操作符包括 ++--+-,它们在处理变量自增、自减或符号变换方面尤为重要。单目操作符尽管概念简单,但由于其位置和使用场景不同,导致其行为表现出显著的差异,这种微妙之处正是其魅力所在。


1 自增与自减操作符:++--

在这里插入图片描述
++ 是一种自增操作符,通常用于将操作数的值增加 1。++ 分为前置自增后置自增两种形式,分别记为 ++aa++

-- 是一种自减操作符,用于将操作数的值减去 1,类似地,-- 也有前置自减后置自减的形式,分别记为 --aa--

在使用 ++-- 时,必须特别注意前置后置的区别:

  • **前置 ++--:在变量被使用前,先对其执行增减操作。前置操作符意味着变量的值在表达式求值之前被修改,适用于需要立即使用增值或减值后的变量的场景。
  • **后置 ++--:在变量被使用后,才对其执行增减操作。后置操作符意味着当前表达式首先使用变量的值,随后再执行增减操作,这种方式在需要使用变量的原始值时尤其有用。

这种前置和后置的细微差别可能导致截然不同的结果,特别是在更复杂的代码逻辑中,因此需要格外谨慎地使用。


2 前置 ++ 和 后置 ++

在这一部分中,我们对前置 ++ 和后置 ++ 之间的差异进行详尽的说明,并通过实际代码示例来演示它们的不同用法。

特性前置 ++++a后置 ++a++
增值时机先自增,后使用先使用,后自增
使用场景用增值后的变量参与运算用原值参与运算
对变量的影响操作完成后变量值已增加操作完成后变量值才增加

在这里插入图片描述


案例 1:前置 ++

#include <iostream>
using namespace std;

int main() {
	int x = 10;
	int a = ++x;  // ++ 的操作数是 x,前置自增意味着 x 的值先增加,然后赋值给 a
	cout << x << " " << a << endl;
    return 0;
}

在这里插入图片描述

在上述例子中,++x前置自增,意味着变量 x 会先自增 1,然后将新的值赋给 a。因此,xa 的值都是 11。前置自增操作通常在需要直接使用变量的增值后的结果时非常有效。


案例 2:后置 ++

#include <iostream>
using namespace std;

int main() {
	int x = 10;
	int a = x++;  // ++ 的操作数是 x,后置自增意味着先使用 x 的当前值再增加
	cout << x << " " << a << endl;
    return 0;
}

在这里插入图片描述

在这个例子中,x++后置自增,意味着首先将 x 的当前值 10 赋给 a,然后再让 x 增加 1。因此,a 的值是 10,而 x 的值会变为 11。后置自增的这种特性在希望保留原始值的情况下非常实用。


小技巧

  • **前置 ++:先对变量加 1,再使用其新值。
  • **后置 ++:先使用变量的原始值,再对其加 1。

通过这些示例,我们可以更好地理解前置与后置自增的区别。前置和后置的选择在循环控制语句中尤为常见,比如 for 循环的迭代部分,理解它们的不同行为有助于编写逻辑清晰、行为可预测的代码。
在这里插入图片描述


3 前置 -- 和 后置 --

++ 类似,-- 也有前置和后置两种形式。它们的行为与 ++ 完全一致,关键区别在于操作的时机以及变量值的使用顺序。

特性前置 ----a后置 --a--
增值时机先自减,后使用先使用,后自减
使用场景用减值后的变量参与运算用原值参与运算
对变量的影响操作完成后变量值已减少操作完成后变量值才减少

在这里插入图片描述


案例 1:前置 --

#include <iostream>
using namespace std;

int main() {
	int y = 10;
	int b = --y;  // -- 的操作数是 y,前置自减意味着 y 的值先减少,再赋值给 b
	cout << y << " " << b << endl;
    return 0;
}

在这里插入图片描述

在这个例子中,--y前置自减,意味着变量 y 会先自减 1,然后将新的值赋给 b。因此,yb 的值均为 9。前置自减通常用于需要立即使用修改后的变量值的场景。


案例 2:后置 --

#include <iostream>
using namespace std;

int main() {
	int y = 10;
	int b = y--;  // -- 的操作数是 y,后置自减意味着先使用 y 的当前值,再让 y 自减
	cout << y << " " << b << endl;
    return 0;
}

在这里插入图片描述

在这个例子中,y--后置自减,意味着首先使用 y 的当前值 10 赋给 b,然后 y 再自减 1。因此,b 的值是 10,而 y 的值变为 9。后置自减通常在希望操作前保留变量原始值的场景中使用。


小技巧

在这里插入图片描述

  • **前置 --:先对变量减 1,再使用其新值。
  • **后置 --:先使用变量的原始值,再对其减 1。

💯正负号操作符:+-

在 C++ 中,+- 作为单目操作符分别表示正号和负号。这些符号在数值处理中起到了非常基础但至关重要的作用。

  • + 操作符** 对正值没有实际影响,是一个完全可以省略的运算符,写了也不会产生错误。例如:

    int a = +10;  // 等价于 int a = 10;
    

    在某些情况下,为了代码的可读性,可以保留 + 来强调这是一个正数。

  • - 操作符** 用于改变一个值的符号,将正数变为负数,或者将负数变为正数。
    在这里插入图片描述


案例分析

#include <iostream>
using namespace std;

int main() {
	int a = 10;
	int b = -a;   // b = -10
	int c = -b;   // c = 10
	cout << b << " " << c << endl;
    return 0;
}

在这里插入图片描述

在上述例子中:

  • b = -a 将正数 a 变为负数,得到 b = -10
  • c = -b 将负数 b 变为正数,得到 c = 10

负号的更多案例

#include <iostream>
using namespace std;

int main() {
	int a = -10;
	int b = -a;   // b = 10
	cout << b << endl;
    return 0;
}

在这里插入图片描述

在这个例子中,变量 a 的初始值为 -10,通过 -a 操作符,将 a 的负值转换为正值,赋给 b,因此 b = 10。这种符号转换在处理涉及正负号变化的运算时尤为重要。


💯小结

  • 在这里插入图片描述在这篇文章中,我们详细探讨了 C++ 中的几种常见单目操作符,包括 ++--+-。这些操作符具有以下特点:
操作符功能示例结果
前置++先自增,再使用int a = ++x;xa 均为 x + 1
后置++先使用,再自增int a = x++;ax 的原始值,x 自增
前置--先自减,再使用int b = --y;yb 均为 y - 1
后置--先使用,再自减int b = y--;by 的原始值,y 自减
+表示正号,无实际效果int a = +10;a = 10
-改变正负号int b = -10;b = -10
-负数变正int b = -(-10);b = 10
  • 通过对这些操作符的详细分析和案例,我们可以看到它们在程序设计中具有非常重要的作用。选择使用前置还是后置取决于你希望变量在表达式中的参与方式。同时,理解正负号操作符的意义将有助于在复杂的数值计算中更好地控制变量的行为。单目操作符的正确使用是编写高效、清晰和维护友好代码的基础,希望本文能够帮助你深入掌握 C++单目操作符的用法。

  • 对于编程初学者而言,牢固掌握这些操作符是通向熟练编程的关键步骤。而对于有经验的程序员来说,深入理解这些操作符的细节与其背后的原理,将极大提升代码的性能和质量,减少潜在的 逻辑错误。无论你正处于编程学习的哪个阶段,充分掌握这些单目操作符的使用,都将为你的编程能力奠定坚实的基础,使你能够更加从容地面对编程中的挑战与复杂性


在这里插入图片描述


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SAP SD学习笔记15 - 投诉处理2 - 返品处理流程之 参照请求传票(发票)来生成返品传票

上一章讲了返品处理&#xff08;退货处理&#xff09;的流程。 SAP SD学习笔记14 - 投诉处理1 - 返品处理&#xff08;退货处理&#xff09;的流程以及系统实操&#xff0c;比如 返品传票&#xff1b;请求Block标记&#xff1b;收到退货之后的处理&#xff0c;请求传票的登录_…

【C语言】二叉树(BinaryTree)的创建、3种递归遍历、3种非递归遍历、结点度的实现

代码主要实现了以下功能&#xff1a; 二叉树相关数据结构定义 定义了二叉树节点结构体 BiTNode&#xff0c;包含节点数据值&#xff08;字符类型&#xff09;以及指向左右子树的指针。 定义了顺序栈结构体 SqStack&#xff0c;用于存储二叉树节点指针&#xff0c;实现非递归遍历…

【博主推荐】C# Winform 拼图小游戏源码详解(附源码)

文章目录 前言摘要1.设计来源拼图小游戏讲解1.1 拼图主界面设计1.2 一般难度拼图效果1.3 普通难度拼图效果1.4 困难难度拼图效果1.5 地域难度拼图效果1.6 内置五种拼图效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载结束语 前言 在数字浪潮汹涌澎湃的时代&#xff0c;程序开…

C++初阶(十七)--STL--stack和queue详解及使用

目录 stack 概念 stack的定义 stack的使用 queue 概念 queue的定义 queue的使用 在 C 的标准模板库&#xff08;STL&#xff09;中&#xff0c;stack&#xff08;栈&#xff09;和queue&#xff08;队列&#xff09;是非常重要的容器适配器。它们基于其他基础容器实现&…

【ubuntu24.04】GTX4700 配置安装cuda

筛选显卡驱动显卡驱动 NVIDIA-Linux-x86_64-550.135.run 而后重启:最新的是12.6 用于ubuntu24.04 ,但是我的4700的显卡驱动要求12.4 cuda

远程桌面协助控制软件 RustDesk v1.3.3 多语言中文版

RustDesk 是一款开源的远程桌面软件&#xff0c;支持多平台操作&#xff0c;包括Windows、macOS、Linux、iOS、Android和Web。它提供端到端加密和基于角色的访问控制&#xff0c;确保安全性和隐私保护。使用简单&#xff0c;无需复杂配置&#xff0c;通过输入ID和密码即可快速连…

【Linux】gdb / cgdb 调试 + 进度条

&#x1f33b;个人主页&#xff1a;路飞雪吖~ &#x1f320;专栏&#xff1a;Linux 目录 一、Linux调试器-gdb &#x1f31f;开始使用 &#x1f320;小贴士&#xff1a; &#x1f31f;gdb指令 &#x1f320;小贴士&#xff1a; ✨watch 监视 ✨打条件断点 二、小程序----进…

C++初阶——动态内存管理

目录 1、C/C内存区域划分 2、C动态内存管理&#xff1a;malloc/calloc/realloc/free 3、C动态内存管理&#xff1a;new/delete 3.1 new/delete内置类型 3.2 new/delete自定义类型 4、operator new与operator delete函数 5、new和delete的实现原理 5.1 内置类型 5.2 自定…

开发一套ERP 第八弹 RUst 插入数据

更全面的报错,方便检查错误在哪里,现代高级语言越来越智能 还是得看下原文档怎么操作的 src 目录为crate 的根目录 想在crate 中模块相互引入需要在 main 中声明,各个模块,然后才能在各个模块中相互引入和使用 原始工程引入,避免直接使用 lib.rs 回合cargo 中的一些 工程管理出…

【学习笔记】基于RTOS的设计中的堆栈溢出(Stack Overflow)-第1部分

本文由RTOS专家Jean J. Labrosse撰写。 基于RTOS的应用程序中的每个任务都需要自己的堆栈,堆栈的大小取决于任务的要求(例如,函数调用嵌套、传递给函数的参数、局部变量等)。 为了避免堆栈溢出,开发人员需要过度分配堆栈空间,但不要太多,以避免浪费RAM。 什么是堆栈溢…

基于java+SpringBoot+Vue的教学辅助平台设计与实现

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis Maven mysql5.7或8.0等等组成&#x…

mfc110u.dll是什么意思,mfc110u.dll丢失解决方法大全详解

mfc110u.dll是Microsoft Foundation Classes (MFC)库的一个特定版本&#xff08;版本11.0&#xff09;的Unicode动态链接库文件。MFC是Microsoft为C开发者设计的一个应用程序框架&#xff0c;主要用于简化Windows应用程序的开发工作。这个框架封装了很多Windows API函数&#x…

MySQL查看日志

目录 1. 日志 1.1 错误日志 1.2 二进制日志 1.2.1 介绍 1.2.2 格式 1.2.3 查看 1.2.4 删除 1.3 查询日志 1.4 慢查询日志 1. 日志 1.1 错误日志 错误日志是 MySQL 中最重要的日志之一&#xff0c;它记录了当 mysqld 启动和停止时&#xff0c;以及服务器在运行过…

API平台建设之路:从0到1的实践指南

在这个互联网蓬勃发展的时代&#xff0c;API已经成为连接各个系统、服务和应用的重要纽带。搭建一个优质的API平台不仅能为开发者提供便利&#xff0c;更能创造可观的商业价值。让我们一起探讨如何打造一个成功的API平台。 技术架构是API平台的根基。选择合适的技术栈对平台的…

【组件封装】uniapp vue3 封装一个自定义下拉刷新组件pullRefresh,带刷新时间和加载动画教程

文章目录 前言一、实现原理二、组件样式和功能设计三、scroll-view 自定义下拉刷新使用回顾相关属性&#xff1a;最终版完整代码&#xff1a; 前言 手把手教你封装一个移动端 自定义下拉刷新组件带更新时间和加载动画&#xff08;PullRefresh&#xff09;&#xff0c;以uniapp …

2、Three.js初步认识场景Scene、相机Camera、渲染器Renderer三要素

三要素之间关系&#xff1a; 有了虚拟场景Scene&#xff0c;相机录像Camera&#xff0c;在相机小屏幕上看到的Renderer Scene当前空间 Mesh人在场景 Camera相机录像 Renderer显示器上 首先先描述下Scene&#xff1a; 这个场景为三要素之一&#xff0c;一切需要展示的东西都需…

Unity中的数学应用 之 插值函数处理角色朝向 (初中难度 +Matlab)

CodeMonkey教程&#xff1a; https://www.youtube.com/watch?vQDWlGOocKm8 Siki学院汉化教程&#xff1a;如何使用Unity开发分手厨房&#xff08;胡闹厨房&#xff09;-Unity2023 - SiKi学院|SiKi学堂 - unity|u3d|虚幻|ue4/5|java|python|人工智能|视频教程|在线课程 版本&am…

2-2-18-7 QNX 系统架构-动态链接

阅读前言 本文以QNX系统官方的文档英文原版资料为参考&#xff0c;翻译和逐句校对后&#xff0c;对QNX操作系统的相关概念进行了深度整理&#xff0c;旨在帮助想要了解QNX的读者及开发者可以快速阅读&#xff0c;而不必查看晦涩难懂的英文原文&#xff0c;这些文章将会作为一个…

PPT不能编辑,按钮都是灰色,怎么办?

PPT文件打开之后&#xff0c;发现无法编辑&#xff0c;再仔细查看发现工具栏中的功能按钮都是灰色的&#xff0c;无法使用&#xff0c;这是什么原因&#xff1f;该如何解决&#xff1f; 原因&#xff1a;无法编辑PPT文件&#xff0c;并且功能按钮都是灰色&#xff0c;这是因为…

PMP–一、二、三模、冲刺–分类–8.质量管理

文章目录 技巧五、质量管理 一模8.质量管理--质量管理计划--质量管理计划包括项目采用的质量标准&#xff0c;到底有没有满足质量需求&#xff0c;看质量标准即可。6、 [单选] 自项目开始以来&#xff0c;作为项目经理同事的职能经理一直公开反对该项目&#xff0c;在讨论项目里…