【010】C++运算符详解

news2025/1/16 3:48:39

C++运算符详解

  • 引言
  • 一、运算符概述
  • 二、算术运算符
  • 三、复合运算符
  • 四、关系运算符
  • 五、逻辑运算符
  • 六、位运算符(二进制位运算)
    • 6.1、& 按位与
    • 6.2、| 按位或
    • 6.3、~ 按位取反
    • 6.4、^ 按位异或
    • 6.5、<< 左移:左边丢弃,右边补零
    • 6.5、>> 右移:右边丢弃,左边补0或补1
  • 七、三目运算符 ?:
  • 八、运算符优先级
  • 九、自增自减运算符
  • 十、案例:产生随机数

引言


💡 作者简介:专注于C/C++高性能程序设计和开发,理论与代码实践结合,让世界没有难学的技术。包括C/C++、Linux、MySQL、Redis、TCP/IP、协程、网络编程等。
👉
🎖️ CSDN实力新星,社区专家博主
👉
🔔 专栏介绍:从零到c++精通的学习之路。内容包括C++基础编程、中级编程、高级编程;掌握各个知识点。
👉
🔔 专栏地址:C++从零开始到精通
👉
🔔 博客主页:https://blog.csdn.net/Long_xu


🔔 上一篇:【009】C++数据类型之转义字符和类型转换

一、运算符概述

C++运算符是指用于执行特定操作的符号或符号组合。以下是常见的C++运算符:

  1. 算术运算符:加(+)、减(-)、乘(*)、除(/)、取余(%)等。

  2. 比较运算符:等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)等。

  3. 逻辑运算符:与(&&)、或(||)、非(!)等。

  4. 位运算符:按位与(&)、按位或(|)、异或(^)、左移(<<)、右移(>>)等。

  5. 赋值运算符:赋值(=)、复合赋值(+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=)等。

  6. 条件运算符:条件表达式(? : )。

  7. 逗号运算符:逗号(,)。

  8. 成员访问运算符:点(.)、箭头(->)。

  9. 自增自减运算符:自增(++)、自减(–)。

  10. 类型运算符:sizeof。

  11. 强制类型转换运算符:static_cast、reinterpret_cast、dynamic_cast、const_cast。

  12. 其他运算符:new、delete、地址运算符(&)、间接寻址运算符(*)、条件编译运算符(#if、#else、#endif)、lambda运算符([])等。

用算术运算符将运算对象连接起来的,符合C++语法规则的表达式,称为C++算术表达式,运算对象包括常量、变量、函数返回值等。例如:
在这里插入图片描述
特别地:

  • 需要一个运算对象的叫单目运算符。
  • 需要两个运算对象的叫双目运算符。
  • 需要三个运算对象的叫三目运算符。
  • 需要多个运算对象的叫多目运算符。

二、算术运算符

算术运算符有:加(+)、减(-)、乘(*)、除(/)、取余(%)等。

(1)除(/)的取整:如果 / 的所有运算对象都是整数, / 的功能就是取整。

5/3 == 1;
5/2 == 2;

(2)除(/)的除法运算符:如果 / 有一个运算对象是实型, / 的功能就是除法运算。

5/2.0 == 2.5;

(3)取余(%)运算符。

5%2 == 1;
3%5 == 3;

示例:

键盘输入一个数,判断能否被3整除。

#include <iostream>

using namespace std;

int main()
{
	int data = 0;
	cout << "请输入一个整数:";
	cin >> data;

	if (data % 3 == 0)
		cout << data << " 可以被 3 整除" << endl;
	else
		cout << data << " 不可以被 3 整除" << endl;

	return 0;
}

输出:

请输入一个整数:16
16 不可以被 3 整除

使用rand()函数产生一个60~100的随机数。

// 60= 60 + 0;
// 100 = 60 + 40;
// 因此,data%n=n-1;推导出 n-1=40;所以n=41; 
// 所以取余的数是41。
rand()%41 + 60;

使用rand()函数产生一个’a’ ~ ‘z’ 的随机字母。

// 'a'= 'a' + 0;
// 'z' = 'a' + 25;(26个字母,从0开始算就是0~25)
// 因此,data%n=n-1;推导出 n-1=25;所以n=26; 
// 所以取余的数是41。
rand()%26 + 'a';

三、复合运算符

+=、-=、*=、/=、%=等。

a+=b;// a=a+b;
a-=b;// a=a-b;
a/=b;// a=a/b;
a%=b;// a=a%b;

特别需要注意的是:一定要把等号右边看成一个整体。

int a=3;
a*=4+5;//a=a*(4+5);
// a=27;

示例:

int a=0;
a+=a-=a*=a;//根据运算符优先级,从右往左运算;
// a=0;
// 规律,只要看到中间有a-=a;则必定为0。

四、关系运算符

等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)等。

特别需要注意的是,等号一定要在右边。

=< 是错误的。
=< 是错误的。

示例:
在这里插入图片描述

五、逻辑运算符

与(&&)、或(||)、非(!)等。

(1)与(&&):只要有一个为假,则整个表达式为假,否则为真。
(2)或(||):只要有一个为真,则整个表达式为真,否则为假。
(3)非(!):把真变为假,假变为真。

需要注意的是,&&和||都有一些特性:

  • 如果&&中检测到一个对象为假,则直接判断为假,因为后面的判断对结果已经不起影响了。
  • 如果||中的检测到一个对象为真,则直接判断为真,因为后面的判断对结果已经不起影响了。

在c语言中,除了0是假,其他都为真。

六、位运算符(二进制位运算)

按位与(&)、按位或(|)、异或(^)、左移(<<)、右移(>>)等。

6.1、& 按位与

规律:全1为1,有0为0。
特点:和1相与保持不变,和0相与为0。
场景:将指定位清零。

  1100 0011
& 1111 0000
---------------
  1100 0000

示例:将一个字节的第三第四位清零,其他保持不变。

unsigned char data;
data=data & 0xe7;// 0xe7 = 1110 0111
data&=0xe7;//等效

6.2、| 按位或

规律:全0为0,有1为1。
特点:有1置1,有0保持不变。
场景:将指定位置1。

  1100 0011
| 1111 0000
---------------
  1111 0011

示例:将一个字节的第五、六个位置置1,其他保持不变。

unsigned char data;
data=data | 0x60;// 0x60 = 0110 0000
data|=0x60;//等效

6.3、~ 按位取反

规律:0变1,1变0。

一般用来配合其他位运算符。

~1100 0011 = 0011 1100;

6.4、^ 按位异或

规律:相同为0,不同为1。
特点:和1异或取反,和0异或保持不变。
场景:将指定位发生翻转。

  1100 0011
^ 1111 0000
---------------
  0011 0011

6.5、<< 左移:左边丢弃,右边补零

移动的位数不要超过自身位的宽度。

在这里插入图片描述
规律:左移多少,相当于乘上2的n次方。

char data=0000 0001;
// 左移0位:
data=data<<0;// = data*2^0;
// 左移1位:
data=data<<1;// = data*2^1;
// 左移2位:
data=data<<2;// = data*2^2;
// 左移3位:
data=data<<3;// = data*2^3;
// ......

6.5、>> 右移:右边丢弃,左边补0或补1

在这里插入图片描述
算术右移、逻辑右移都是编译器决定的,用户无法确定。

无符号:右边丢弃,左边补0。

有符号:

  • 正数:右边丢弃,左边补0。
  • 负数:右边丢弃,左边补1(算术左移)。
  • 负数:右边丢弃,左边补0(逻辑左移)。

规律:左移多少,相当于除上2的n次方。

unsigned char data=1000 0000;
// 左移0位:
data=data>>0;// = data除上2^0;
// 左移1位:
data=data>>1;// = data除上2^1;
// 左移2位:
data=data>>2;// = data除上2^2;
// 左移3位:
data=data>>3;// = data除上2^3;
// ......

七、三目运算符 ?:

C++中的三目运算符是一种条件表达式,也称为条件运算符。它的语法如下:

condition ? expression1 : expression2;

其中,condition是一个条件表达式,如果它的值为真,则返回expression1的值;否则,返回expression2的值。

例如,以下代码使用三目运算符计算两个数的最大值:

#include <iostream>
using namespace std;

int main() {
    int a = 10;
    int b = 20;
    int max_num = (a > b) ? a : b;
    cout << "Max number is " << max_num << endl;
    return 0;
}

输出结果为:

Max number is 20

在上面的代码中,如果a大于b,则max_num等于a,否则max_num等于b。

八、运算符优先级

C++中运算符的优先级如下(从高到低):

  1. 括号:()
  2. 一元运算符:++ – ! ~ + - * & sizeof new delete
  3. 强制类型转换:(type)
  4. 乘除模运算符:* / %
  5. 加减运算符:+ -
  6. 移位运算符:<< >>
  7. 关系运算符: < <= > >=
  8. 相等运算符:== !=
  9. 按位与运算符:&
  10. 按位异或运算符:^
  11. 按位或运算符:|
  12. 逻辑与运算符:&&
  13. 逻辑或运算符:||
  14. 条件运算符:? :
  15. 赋值运算符:= += -= *= /= %= <<= >>= &= ^= |=
  16. 逗号运算符:,

注意,优先级从上到下,越靠上的优先级越高。例如,括号优先级最高,因此括号内的运算会先被执行。而逗号运算符的优先级最低,因此它的运算会在其他运算完成后才会被执行。

九、自增自减运算符

C++ 中的自增运算符(++)和自减运算符(–)是一种特殊的算术运算符,用于增加或减少一个变量的值。它们可以作为前缀或后缀操作符使用。

前缀形式:操作符位于变量名之前(例如 ++i),此时变量的值会在计算前先自增或自减一次,然后返回该变量的新值。

后缀形式:操作符位于变量名之后(例如 i++),此时变量的值会在计算之后自增或自减一次,但是表达式的结果仍为原始值,只有下一次使用该变量时才会体现出自增或自减的效果。

示例:

int i = 1;
cout << ++i; // 输出 2,因为 i 先自增一次再输出
cout << i++; // 输出 2,但 i 的值已经自增了一次,下一次使用 i 时就会体现出来
cout << i;   // 输出 3,因为 i 自增了一次

十、案例:产生随机数

rand()函数是一个伪随机数,所以每次产生随机数之前必须要设置随机数种子,使用srand()函数。为了保证每次执行都会设置一个变化的种子,我们把时间传给srand()。种子只需要设置一次。

#include <iostream>
#include <time.h>
using namespace std;

int main()
{
	srand(time(NULL));
	cout<<rand()<<endl;
	return 0;
}

在这里插入图片描述

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

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

相关文章

MySQL高级篇——排序、分组、分页优化

导航&#xff1a; 【Java笔记踩坑汇总】Java基础进阶JavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线MySQL高级篇设计模式牛客面试题 目录 5. 排序优化 5.1 排序优化建议 5.2 测试 5.2.1 案例验证 5.3.2 练习 5.3 范围查询时索引字段选择 5.4 filesor…

chatgpt赋能Python-python_fem

Python在有限元分析中的应用 什么是有限元分析 有限元分析&#xff08;Finite Element Analysis, FEA&#xff09;是一种针对工程结构、材料及其它物理现象进行数值仿真的方法。它通过将结构或者物理现象的连续域分割成有限个小元素&#xff0c;再在每个小元素中建立数学模型…

【搭建HTTP服务器】使用Nodejs搭建简单的HTTP服务器

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…

当在网页浏览器的地止栏中输入URL或关键词时,web页面是如何呈现的?

前言 当我们在浏览器中输入一个url,或在搜索引擎或网站内,输入一个关键词进行搜索时,页面发生了什么呢? 即使不了解其中的原理,也能看到web页面 在浏览器地止栏内输入一个url之后,信息会被传到某些地方(后台,可以成为服务端)&#xff0c;然后后台得到响应后,从后台(服务端)返回…

Day4——数据库基础1(已完结)

Day4——数据库基础 数据库基础--基于phpstudy自带的MySQL数据库&#xff08;下载了PHPstudy后就无需下载额外的MySQL&#xff09; 一、数据库概念1、为什么要学习数据库&#xff1f;2、什么是数据库&#xff1f;3、数据库的访问方式4、数据管理技术经历的三个阶段5、关系型数据…

YOLOv5区域检测计数+声音警报

YOLOv5区域检测计数声音警报 1. 相关配置2. 检测区域设置3. 画检测区域线&#xff08;不想显示也可以不画&#xff09;4. 报警模块5. 计数模块6. 代码修改6.1 主代码6.2 细节修改&#xff08;可忽略&#xff09; 6. 实验效果 本篇博文工程源码下载 链接1&#xff1a;https://gi…

docker 的yum安装

目录 一、配置docker官方的yum仓库 1&#xff09;安装工具yum-utils 2&#xff09;调用yum-utils工具的命令 yum-config-manager 添加 docker官方的社区版yum仓库 二、docker版本选择安装 1、查看docker发布的版本 2、yum 安装docker 3、启动服务&#xff0c;设置开机启…

腾讯云服务器地域怎么选?不同地域有什么区别?

腾讯云服务器地域有什么区别&#xff1f;怎么选择比较好&#xff1f;地域选择就近原则&#xff0c;距离地域越近网络延迟越低&#xff0c;速度越快。关于地域的选择还有很多因素&#xff0c;地域节点选择还要考虑到网络延迟速度方面、内网连接、是否需要备案、不同地域成本因素…

逆波兰算法

目录 介绍一下逆波兰算法 能举一个逆波兰算法应用的运算示例吗&#xff1f; 介绍一下逆波兰算法 逆波兰算法&#xff0c;也称为后缀表达式算法或逆波兰记法&#xff0c;是一种用于计算数学表达式的算法。与常见的中缀表达式&#xff08;如 3 4&#xff09;不同&#xff0c;逆…

系统设计 - 设计一个速率限制器

实施速率限制器的位置主要取决于我们的应用程序、技术栈、技术团队等因素。通常有三个位置可供选择&#xff1a;客户端、服务器端或中间件。 客户端是不可靠的地方来执行速率限制&#xff0c;因为恶意行为者可以轻易伪造客户端请求。 比将速率限制器放在服务器端更好的方法是使…

海量视频处理的应对和算法实践

随着短视频、直播、智慧城市、5G等的快速发展&#xff0c;视频内容铺天盖地&#xff0c;五花八门&#xff0c;相应的处理需求也多种多样。如何能高效地应对&#xff1f;需要在数据处理系统&#xff0c;底层计算能力&#xff0c;以及算法研究等多方面协同努力。LiveVideoStackCo…

深度:ChatGPT只是表面的喧嚣,大模型才是那柄尖刀!

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 如果把时钟拨到2023年底&#xff0c;当我们回过头来看今年科技界最激动人心的大事件&#xff0c;ChatGPT的横空出世无疑会占据一席之地。就像几年前大家被谷歌AlphaGo点燃对人工智能的热情一样&#xff0c;人们对ChatGPT的热…

安装 Jenkins 2.346.3 LTS

环境&#xff1a; apache-tomcat-8.5.88 Jenkins 2.346.3 LTS Running Jenkins system Jenkins requires Java 11 or 17 since Jenkins 2.357 and LTS 2.361.1. Read more about this in the announcement blog post. https://www.jenkins.io/doc/administration/requirement…

SSM_jsp游戏-账-号-装-备虚拟物品交易系统

开发语言&#xff1a;Java 框架&#xff1a;ssm 前端框架:jsp/Bootstrap JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat8 数据库工具&#xff1a;Navicat 开发软件&#xff1a;idea 支持eclipse 游戏账号交易系统主要是为了提高工作人员的工作效率和更方便快捷的满足用户…

AIPRM for ChatGPT 是一个 Chrome 浏览器扩展程序

AIPRM for ChatGPT 是一个 Chrome 浏览器扩展程序&#xff0c;基于 Chromium 内核开发的浏览器&#xff0c;都可以使用该扩展&#xff0c;比如微软的 Edge 浏览器等。 在 AIPRM 的帮助下&#xff0c;我们可以在 ChatGPT 中一键使用各种专门为网站 SEO、SaaS、营销、艺术、编程…

ZBX_NOTSUPPORTED: Unsupported item key.

问题 ZBX_NOTSUPPORTED: Unsupported item key. 详细问题 笔者安装zabbix后&#xff0c;自定义item key进行测试。需在zabbix-server 端 切换目录&#xff1a; cd /usr/local/zabbix/bin 执行查询命令&#xff1a; ./zabbix_get -s 192.168.174.136 -p 10050 -k “home.file…

学编程遇到问题,如何更好地提问?

入门教程、案例源码、学习资料、读者群 请访问&#xff1a; python666.cn 大家好&#xff0c;欢迎来到 Crossin的编程教室 &#xff01; 一个编程学习者&#xff0c;尤其是刚入门的初学者&#xff0c;在学习过程中必然会遇到各种问题&#xff0c;于是难免需要向人提问寻求解答。…

让AI替你打工?GPT提升开发效率指南

&#x1f449;腾小云导读 开发者日常的整个工作流中&#xff0c;AI 大模型能做什么&#xff1f;ChatGPT 等 AI 大模型能不能通过开发者的指引&#xff0c;一步步完成从技术方案输出、编码、测试、发布到运营维护的整套流程&#xff1f;使用中有什么避坑点&#xff1f;本文从实际…

【观察】共建“伙伴+华为”背后,是华为平台到体系的战略“升维”

2017年&#xff0c;在当年的“伙伴大会”上&#xff0c;华为首次提出以“平台生态”双轮驱动的战略&#xff0c;以更加开放的心态积极拥抱产业变化&#xff0c;通过和产业链上各个层级的合作伙伴一起合作&#xff0c;共同实现新的市场突破。 彼时中国企业和行业的数字化转型刚刚…

2023智源大会议程公开 | 生成模型论坛

2023年&#xff0c;人工智能新研究、新系统、新产品竞放——我们即将见证另一场有关智能的惊叹演化。6月9日&#xff0c;2023北京智源大会&#xff0c;将邀请这一领域的探索者、实践者、以及关心智能科学的每个人&#xff0c;共同拉开未来舞台的帷幕&#xff0c;你准备好了吗&a…