c++ 操作符大全-算术操作符、关系操作符、逻辑操作符、位操作符、自增自减操作符、赋值操作符、条件操作符、逗号操作符、操作符优先级

article/2025/9/13 1:38:15

文章目录

  • 操作符
    • 1、算术操作符
    • 2、关系操作符
    • 3、逻辑操作符
    • 4、位操作符
    • 5、自增自减操作符
    • 6、赋值操作符
    • 7、条件操作符
    • 8、逗号操作符
    • 9、操作符优先级

操作符

计算机程序可以看作一串运算式,可以对各种运算类型进行运算。这种运算不仅仅是代数上的加减乘除,也可以是在计算机中存在的数据类型的改变,还可以是一种抽象的操作。比如说我们定义组装两个机械零件,那么我们也可以定义一种已知的操作“+”,使其能够表示组装零件的操作,总之,对于基本的整型、浮点数等的种种运算操作,我们都可以用操作符(Operator)来表示。操作符一般以一到两个特殊符号的形式出现。

    每个操作符要完成运算需要的数据,也就是操作数。不同的操作符所需要的操作个数是不一样的,“+”只需要两个操作数,因此也称为二元操作符。除此之外,还有一元操作符和三元操作符分别需要一个和三个操作数。操作数的类型会决定操作数的行为,例,“a+b”在a和b都是整数的情况下进行的是整数加法运算,而在a和b都是字符串的情况下进行的是字符串的连接。

1、算术操作符

    算术操作符用在数学表达式中,基本都是一些数学中常用的运算符号。

![在这里插入图片描述](https://img-blog.csdnimg.cn/5f17ba4a6ce244fdb4d2466aeb82e99c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5peg5pWM5LiA5oyH56aF,size_15,color_FFFFFF,t_70,g_se,x_1对于这些操作符有几个需要注意的地方:

    1.算数操作符都可以看做二元操作符操作两个操作数,其中“+”和“-”也可以作为数值的正负号,此时他们是一元操作符。2.除法和取余数操作符可以看做一对一的互补的操作符,对于整数除法“5/2”来说,除法得到整数的商,而小数部分0.5直接去掉,或是直接通过“5%2”获得余数1.这里不存在四舍五入的问题,而是直接去掉小数部分。3.取余操作不能对浮点数进行,至于“5%-2”这种带负数的取余,c++不同版本的标准对结果符号有着不同的规定,有的返回正数,有的返回负数,在实际编程中我们要以编程结果为准。
#include<iostream>
using namespace std;//算术操作符int main()
{int a = 5 ;int b = 2 ;cout << "+ a :" << (+a) <<endl;cout << "- a :" << (-a) <<endl;cout << "a + b :" << (a+b) <<endl;cout << "a - b :" << (a-b) <<endl;cout << "a * b :" << (a*b) <<endl;cout << "a / b :" << (a/b) <<endl;cout << "a % b :" << (a%b) <<endl;return 0;
}

可以看出,“+”作为取正符号时没有任何作用,“-”则会返回数字的相反数。

2、关系操作符

关系操作符用于比较数值的大小,这个概念与数学相同。不同的类型之间作比较会产生类型转换。对于浮点型来说“==”可能不太实用,因为他检查的是两个数完全相等,这在现实中是很少见的;如果两个数很接近,但是最后一个数不一样,比较相等就不会成功。

c++关系操作符
在这里插入图片描述

#include<iostream>
using namespace std;//算术操作符int main()
{int a = 5;int b = 2;int one = 1;bool t = true ;cout <<"a>b :" << (a>b) <<endl;cout <<"a<b :" << (a<b) <<endl;cout <<"a>=b:" << (a>=b) <<endl;cout <<"a<=b:" << (a<=b) <<endl;cout <<"t==one :" << (t==one) <<endl;cout <<"t!=one :" << (t!=one) <<endl;return 0;
}

程序运行后,5和2的比较都在意料之内的,而true和1是相等的。这是因为布尔值在这里遇到了整数,会发生类型转换,布尔值两个字面值true和false对应的数值量就是1和0.因为比较的两者不是同一类型,因此在运行过程中会出现警告,在操作中将bool和int类型混合不安全。

3、逻辑操作符

逻辑操作符包含了基本的逻辑与、逻辑或、逻辑非三种操作,逻辑与和逻辑或是二元操作符,逻辑非是一元操作符。

c++逻辑操作符
在这里插入图片描述逻辑操作符是结果为布尔类型的表达式,一般用于跟关系操作符复合组成的复杂逻辑表达式。当然其他类型也可以作为操作数转化为true和false,或者是1和0,但是在表达式中使用非1,非0的数值并不是恰当的做法。

//逻辑操作符

#include <iostream>
using namespace std;//逻辑操作符int main()
{cout << "true && true : " << (true && true) << endl;cout << "true && false :" << (true && false) << endl;cout << "false && false:" << (false && false) << endl;cout << "true || true : " << (true || true) << endl;cout << "true || false :" << (true || false) << endl;cout << "false || false:" << (false ||false) << endl;cout << "! true : " << (! true ) << endl;cout << "!false : " << (! false) << endl;return 0;
}

例子展示了逻辑操作符对确定布尔值进行操作的各种可能结果。

//逻辑操作符与关系操作符的组合使用

#include<iostream>
using namespace std;//逻辑操作符与关系操作符的组合使用int main()
{int a = 2;int b = 5;cout <<"a < 3 && b < 3 : " << (a < 3 && b < 3 ) << endl;cout <<"a < 3 || b < 3 : " << (a < 3 || b < 3 ) << endl;cout <<"a < 3 && !b < 3 : " << (a < 3 && !b < 3) << endl;return 0;
}

由于 逻辑与 在一个操作数为false的情况下即为false,

       逻辑或 在一个操作数为true的情况下即为true;对于类似“(a<b)||(c<d)”这样的表达式,只要a<b已经为true,那么右边的c<d也不需要计算了,这种逻辑的算数求值方式叫做短路求职。

//短路求值

#include <iostream>
using namespace std;//短路求值int main()
{int a = 1;if ( a < 2 || ( a = 2 ) ){cout <<"a的值为 :"<< a << endl;}return 0 ;
}

可以看到,由于逻辑操作符“||”左边是true,即使右边的赋值表达式没有执行,最后打印出来的a的值依然是初始值1.

4、位操作符

位操作符就是把整型看作二进制为的序列,然后然后对每个位分别进行位操作。由于二进制每个位只可能是0或1,因此一些类似逻辑操作的运算可以运用在每一位上,也就是位与、位或、位求反和位异或。

//c++位操作符
在这里插入图片描述//位与、位或、位异或、在不同二进制数值组合下的运算结果:

在这里插入图片描述除此之外,位求反就是简单的将0变成1,将1变成0.

//位操作符

#include <iostream>
using namespace std;//位操作符int main()
{int a = 1; //0b01int b = 3; //0b11cout <<"a & b: " << (a & b) << endl;cout <<"a | b: " << (a | b) << endl;cout <<"a ^ b: " << (a ^ b) << endl;cout <<"~a : " << (~a) << endl;return 0;
}

程序的注释中标注了数字的二进制形式,分别是01和11.可以看到由于两个数的高一位并不都是1,因此位与的结果是0,而低一位都是1,所以结果是1,和在一起是01,也就是十进制的1.其他的以此类推。位或:二进制11,十进制3;位异或:二进制 10,十进制 2;位求反:二进制10,十进制2.

//左移和右移符操作符

左移和右移操作符就是把整型的每一位都左移或右移,例无符号二进制数01001001b,左移一位,右边补0,在左移一位,最左边的1才会移除,右移则相反。

#include<iostream>
using namespace std;//左移和右移操作符int main()
{unsigned int a = 4;cout << "a << 1: " << (a<<1) << endl;cout << "a >> 1: " << (a>>1) << endl;return 0;
}

输出结果为:a<<1 :8 ; a>>1 :2

5、自增自减操作符

//自增自减操作符
在这里插入图片描述

#include<iostream>
using namespace std;//自增自减操作符int main()
{int a = 2 ;cout << "a = " << a << endl;cout << "++a=" << ++a << endl;cout << "a++=" << a++ << endl;cout << "--a=" << --a << endl;cout << "a--=" << a-- << endl;return 0;
}

结果 :在这里插入图片描述
这个结果可能会让人感到困惑,为什么a经过了两次递增,两次递减,结果却是3呢?

这是因为在a++之后先返回了原来a的值3,再加一个成为4,之后自减由于是–在前,则4-1成为3后返回给了cout,最后一个a–与a++类似,返回3的a的最终值为2.

6、赋值操作符

//赋值操作符
在这里插入图片描述赋值操作符中,除了第一个“=”是基本操作符外,其他的都是与各种操作符复合而成的复合赋值操作符,以“a+=b”为例,他是“a=a+b”的缩写。

#include<iostream>
using namespace std;//赋值操作符int main()
{int a = 3 ;int b = 2 ;cout << "a += b:" << (a += b) <<endl;cout << "a -= b:" << (a -= b) <<endl;cout << "a *= b:" << (a *= b) <<endl;cout << "a /= b:" << (a /= b) <<endl;cout << "a %= b:" << (a %= b) <<endl;cout << "a <<=b:" << (a <<=b) <<endl;cout << "a >>=b:" << (a >>=b) <<endl;cout << "a &= b:" << (a &= b) <<endl;cout << "a ^= b:" << (a ^= b) <<endl;cout << "a != b:" << (a != b) <<endl;return 0;
}

结果:在这里插入图片描述

7、条件操作符

//条件操作符

条件操作符是一个三元操作符,也是c++中唯一一个三元操作符。

#include<iostream>
using namespace std;//条件赋值符int main()
{int a = 3 ;int b = 2 ;int c = 5 ;int max = a > b ? a : b ;int min = a < c ? a : c ;cout << "max : " << max << endl;cout << "min : " << min << endl;return 0;
}

由例子可以看出,条件符由“?”和“:”两部分组成。“?”前面是一个结果为布尔表达式,而“:”前后则是这个条件为true和false时条件操作符会返回的表达式。此外由于“:”的前后没有什么限制,我们甚至可以嵌套另一个含条件操作符的表达式来进行更复杂的判断。

#include <iostream>
using namespace std;//嵌套条件操作符int main()
{int a = 3 ;int b = 2 ;int c = 5 ;int max = a > b ? (a > c ? a : c) : (b > c ? b : c);int min = a < b ? (a < c ? a : c) : (b < c ? b : c);cout <<"max :" << max << endl;cout <<"min :" << min << endl;return 0;
}

结果:在这里插入图片描述

8、逗号操作符

//逗号操作符

#include<iostream>
using namespace std;//逗号操作符int main()
{int a = 3 ;int b = 2 ;int c = 5 ;int result = (c = b,b--,a++);cout <<"c =" << c <<endl;cout <<"b =" << b <<endl;cout <<"a =" << a <<endl;cout <<"result:" << result <<endl;return 0;
}

结果:在这里插入图片描述
逗号操作符的操作数不一定得是变量或者是赋值表达式,也可以是其他表达式。

9、操作符优先级

相关资料可见:https://blog.csdn.net/qq_41565359/article/details/113878104

#include <iostream>
using namespace std;//操作符优先级int main()
{int a = 3;int b = 2;//((a+b)<(a-(b*0))) || (a>b)if (a+b < a-b*0 || a>b){cout << "条件成立!" <<endl;}return 0;
}

//右结合性

#include<iostream>
using namespace std;//右结合性int main()
{int a = 3;int b = 3;//c=(b=a+1)//如果是左结合性,等价于(c=b)=a+1int c = b = a + 1;cout << "c:"<<c <<endl;return 0;
}

这是右结合性,运行结果为c=4,这是因为右边的赋值先操作,b等于4以后在复制给c.如果是左结合性的情况,b的初始值3就会先赋值给c.

如果本文对您有帮助,请点赞支持一下~


http://chatgpt.dhexx.cn/article/KgelsoLp.shtml

相关文章

操作符详解—c语言

目录 1. 操作符分类&#xff1a; 2. 算术操作符 3. 移位操作符 3.1 左移操作符 3.2 右移操作符 4. 位操作符 5. 赋值操作符 6. 单目操作符 6.1 单目操作符介绍 7. 关系操作符 8. 逻辑操作符 9. 条件操作符 10. 逗号表达式 11. 下标引用、函数调用和结构成…

【SV】流操作符

流操作符 作用 把其后的数据打包成一个比特流 >>和<< 操作符>>把数据从左向右变成流&#xff0c;<<则把数据从右到左变成流。 注意&#xff1a; 可以指定一个片段宽度&#xff0c;把源数据按照这个宽度分段以后再转变成流。 例如 h{>>1{j}} 或…

C语言操作符总结

目录 1.算术操作符 2.移位操作符 3.位操作符 4.赋值操作符 5.单目操作符 6.关系操作符 7.逻辑操作符 8.条件操作符 9.逗号表达式 10.下标引用、函数调用和结构成员 C语言中操作符总共有10种&#xff0c;分别是&#xff1a; 算术操作符&#xff0c;移位操作符&#xf…

C语言操作符汇总

目录 一、算术操作符 二、移位操作符 三、位操作符 四、赋值操作符 五、单目操作符 六、关系操作符 七、逻辑操作符 八、条件操作符 九、逗号表达式 十、下标引用、函数调用和结构成员 C语言的操作符分为以下10种&#xff1a; 算术操作符移位操作符位操作符赋值操作…

python 操作符

1.注释: 三种 # " " " 2.输入输出 输出:print() 输入input() 3.变量 保存数据的,就是一个容器 变量名 值 修改变量的值:变量名 新值 *变量的命名: a-z A-Z 0-9 _ 注意:不能以数字开头,就以字母开头就好,_有特殊的作用,不能使用关键字 关键字: …

VHDL的操作符

一、赋值操作符 作用在于更新被赋值数据对象的值&#xff0c;数据对象主要是指信号和变量。VHDL赋值操作符也有信号赋值与变量赋值的区别&#xff0c;分别是&#xff1a; ”<"是信号赋值操作符&#xff0c;可以对标量型的信号类型对象或是矢量型信号类型对象整体赋值…

操作符详解(C语言)

目录 算术操作符(运算符)&#xff1a; - * / % 1、/ &#xff08;除法&#xff09; 2、% (取模、取余&#xff09; 移位操作符&#xff1a; << (左移&#xff09; >>(右移&#xff09; 注意&#xff1a;移位操作符的操作数只能是整数 1、<< …

Java中的类变量和实例变量的区别

类变量也叫静态变量&#xff0c;也就是在变量前加了static 的变量&#xff1b; 实例变量也叫对象变量&#xff0c;即没加static 的变量&#xff1b; 区别在于&#xff1a; 类变量和实例变量的区别在于&#xff1a;类变量是所有对象共有&#xff0c;其中一个对象将它值改变&…

python面向对象类变量的调用和改变

python中对类变量的访问 在python中对类变量的访问有两种方式 方式一&#xff1a;使用类名.变量名 方法二&#xff1a;使用对象名. 变量名 注意&#xff1a;但在使用方法二时&#xff0c;需要注意&#xff0c;在当前对象中是否具有与类变量同名的实例变量&#xff0c;若没有&am…

如何理解Java的类变量、成员变量、常量、类属性、实例属性、字段(field)、成员方法、类方法

文章目录 变量相关概念变量/常量类变量/静态变量成员变量/实例变量类属性/实例属性/对象属性什么是 field 成员变量和类变量的区别两个变量的生命周期不同访问方式不同数据存储位置不同 方法相关概念示例代码判断题 变量相关概念 变量/常量 所谓变量就是指可以改变的数据量&a…

第7.12节 可共享的Python类变量

第7.12节 可共享的Python类变量 一、 引言 在上节已经引入介绍了类变量和实例变量&#xff0c;类体中定义的变量为类变量&#xff0c;默认属于类本身&#xff0c;实例变量是实例方法中定义的self对象的变量&#xff0c;对于每个实例都是独有数据&#xff0c;而类变量是该类…

Java基础---类变量和实例变量

类变量和实例变量 成员变量&#xff1a;把类内、方法体外的变量称为成员变量。 package com.chen.offer.BiliBili;/*** author chenshimiao* Email 16622880228163.com* date 2022/2/18 10:27 下午** 区分成员变量 实例变量和类变量*/ public class Clothes {//实例变量Strin…

什么是类变量,什么是实例变量,它们之间有什么区别?

了解术语很重要。实例变量和类变量都是成员变量。它们都是成员变量&#xff0c;因为它们都与特定类相关联。但是&#xff0c;实例变量和类变量之间存在差异。 实例变量 实例变量属于类的实例。换句话说&#xff0c;实例变量属于对象&#xff0c;因为对象是类的实例。每个对象都…

Java类变量的初始化

目录 两个必须的知识点 字节码指令验证 结果分析 非法前向引用变量 最近在学JVM&#xff0c;在学到类的初始化的时候明白了以前不是很理解的类中静态变量的初始化的过程&#xff0c;如果你也对静态变量的初始化有所困扰或者如下图的输出结果有所疑惑&#xff0c;相信你看完…

如何使用Arthas查看类变量值

使用arthas查看类变量值核心思路是&#xff1a;通过实现ApplicationContextAware接口定义ApplicationUtil类&#xff0c;该类可以获取ApplicationContext的所有的Bean实例&#xff0c;然后通过arthas的ognl查看类实例中的属性值。 搭建简易Spring Boot工程 1. pom依赖 <?…

类变量(静态变量),静态方法(类方法)快速了解一篇足矣

什么是类变量&#xff1f; 类变量也叫静态变量&#xff0c;静态属性&#xff0c;是该类所有对象共享的变量&#xff0c;任何一个该类的对象去访问他时&#xff0c;取到的值都是相同的值&#xff0c;同样任何一个该类对象 去修改他时&#xff0c;修改的也是同一个变量。 如何定…

VS 关于 .sln 文件和 .suo 文件

Visual Studio.NET采用两种文件类型&#xff08;.sln和.suo&#xff09;来存储特定于解决方案的设置,它们总称为解决方案文件。为解决方案资源管理器提供显示管理文件的图形接口所需的信息&#xff0c;从而在每次继续开发任务时&#xff0c;不会因开发环境而分散精力&#xff1…

Linux命令ln -snf给文件创建软链接和硬链接

我们知道 ln 命令用于创建链接文件,ln命令的参数选项有很多,此处主要理解 -snf三个: -s:--symbolic比较容易,有-s时表示创建软连接,没有-s时,表示创建硬链接 -f:--force 强行删除任何已存在的目标文件 -n:--no-dereference 把符号链接的文件视为一般文件 一、创建软链…

Visual studio中.sln、.ncb、.rc、.sdf、.def、.vcproj等后缀文件解释

.sln 解决方案文件 Visual Studio使用解决方案文件(后缀为sln的文件)表示一个项目组&#xff0c;它通常包含一个项目中所有的工程文件信息。 .ncb 无编译浏览文件 无编译浏览文件&#xff1a;其中存放了供ClassView、WizardBar和Component Gallery使用的信息&#xff0c;由VC开…

凸函数的性质、判定,凸规划

一. 凸函数的性质 二. 凸函数的判别 判断一个函数是否为凸函数&#xff0c;最基本的方法是使用其定义。 对可微函数&#xff1a; 三、凸规划定义 最优化问题的目标函数为凸函数&#xff0c;不等式约束函数也为凸函数&#xff0c;等式约束函数是仿射的&#xff0c;则称该最优化问…