【跟学C++】C++各类运算符和运算符优先级(Study4)


 ============================ 【说明】 ===================================================
  大家好,本专栏主要是跟学C++内容,自己学习了这位博主【 AI菌】的【C++21天养成计划】,讲的十分清晰,适合小白,希望给这位博主多点关注、收藏、点赞。
  主要针对所学内容,通过自己的理解进行整理,希望大家积极交流、探讨,多给意见。后面也会给大家更新,其他一些知识。若有侵权,联系删除!共同维护网络知识权利!
 =======================================================================================

1、算术运算符

  算术运算符,顾名思义,和我们数学所学的运算符类似,如加减乘除等,总结如下表:

算术运算符解释示例 (a=10,b=20)
+加法操作a+b=30
-减法操作a-b=-10
*乘法操作a*b=200
/除法操作(除法操作取整数)a/b=0
%取余运算,整除后求余数a%b=10
++自加(增)操作a++ 等于 11
自减操作a-- 等于 9

  **注意:**这里比较重要的是自增运算++和自减运算--,运算符放在变量不同位置得到的结果也不同,主要分两种:前与后。我们通过案例来熟悉一下:

#include <iostream>
using namespace std;
int main() {
	int a = 10;
	int b = 20;

	cout << "a++:" << a++ << endl;
	cout << "++b:" << ++b << endl;
	return 0;
}

在这里插入图片描述
  对于++b而言,先自加1,然后输出;而a++则是先输出,后加1,如果我们输出a,那么a就会发生变化。我们更新下程序:

#include <iostream>
using namespace std;
int main() {
	int a = 10;
	int b = 20;

	cout << "a++:" << a++ << endl;
	cout << "++b:" << ++b << endl;

	cout << "a:" << a << endl;
	cout << "b:" << b << endl;
	return 0;
}

  我们发现,再次输出ab时,a的值变为11b值依旧为21
在这里插入图片描述

2、关系运算符

  什么是关系运算符?简单来说,比较两者之间是什么关系,相等(==)?不等(!=)?大于(>)?还是小于(<)?,在C++中也有这样的表示,即为关系运算符。关系运算符的返回值一般为布尔bool类型,总结如下表:

关系运算符解释示例 (a=10,b=20)
==判断两个值是否相等,若相等则为真a==b为false
!=判断两个值是否相等,若不相等则为真a!=b为true
>判断左值是否大于右值 ,若则为真a>b为false
<判断左值是否小于右值 ,若则为真a<b为true
>=判断左值是否大于或等于右值 ,若则为真a>=b为false
<=判断左值是否小于或等于右值 ,若则为真a<=b 为true

3、位运算符

  位运算符的重点在于,进行逐位操作。常见的有与操作(&)、或操作(|)、异或(^)。对于位运算符是如何操作的,即:

  与操作(&):有0则0
  或操作(|):有1则1
  异或(^):相同为0;不同为1

  总结如下表:

位运算符解释示例 (a=10,b=20)–分别将其转换为二进制数
&与操作,两个二进制数,进行与运算时遵循上述规则a&b(0000 1010 & 0001 0100) ,得到0000 0100为4
|或操作,两个二进制数,进行或操作时遵循上述规则a|b(0000 1010 | 0001 0100),得到0001 1110为30
^异或操作,两个二进制数,进行异或操作遵循上述规则a^b(0000 1010 ^ 0001 0100) ,得到0001 1110为30
~二进制补码运算符,即将二进制数进行“翻转”,0变1,1变0a(0000 1010) ,得到1111 0101为有符号二进制补码形式-117
<<二进制左移运算符,即向左移动指定位数,或理解为二进制数乘以2^n倍a<<2 则表示将0000 1010 左移两位,右边用0补上,即00 1010 00=0010 1000 为40
>>二进制右移运算符,即向右移动指定位数,或理解为二进制数除以2^n倍a>>2 则表示将0000 1010 右移两位,左边用0补上,即00 0000 10=0000 0010 为2

  注意点1: 左移和右移符号
左移<<:左移一位相当于原数乘2;左移n位,即乘2n
右移>>:右移一位相当于原数除2;右移n位,即除2n

  注意点2: 原码、反码、补码
1、原码(0表示正数,1表示负数)
  x=1100110,则[X]原=01100110
  x=-1100111,则[X]原=11100111
2、反码(正数的反码就是自身,负数的反码除符号位外,其他各位求反)
  x=1100110,则[X]反=01100110
  x=-1100111,则[X]反=10011000
  反码肯定属于有符号位,相当于上面有符号位求反
3、补码(正数的补码还是自身,负数的补码,符号位不变,其余取反,然后最低为加1)
  x=1100110,则[X]补=01100110
  x=-1100111,则[X]补=10011001

4、赋值运算符

  赋值运算符,比较简单,写程序时必然会用到它,主要注意的是赋值运算符是1个=,而关系运算符中等于为2个==。常见的赋值运算符总结如下表:

赋值运算符解释示例 (a=10,b=20)
=赋值运算符,=右边的值赋给左边c=a+b 把a+b的值赋给c
+=加且赋值,将+=右边的值加上左边的值,并赋给左边的操作数a+=b 等同于a=a+b
-=减且赋值,将-=右边的值减去左边的值,并赋给左边的操作数a-=b 等同于a=a-b
*=乘且赋值,将*=右边的值乘上左边的值,并赋给左边的操作数a*=b 等同于a=a*b
/=除且赋值,将/=右边的值除以左边的值,并赋给左边的操作数a/=b 等同于a=a/b
%=取余且赋值,将%=右边的值除以左边的值取余数,并赋给左边的操作数a%=b 等同于a=a%b
<<=左移且赋值a<<=2 等同于a=a<<2
>>=右移且赋值a>>=2 等同于a=a>>2
&=按位与运算且赋值a&=b 等同于a=a&b
^=按位异或运算且赋值a^=b 等同于a=a^=b
|=按位或运算且赋值a|=b 等同于a=a|b

5、逻辑运算符

  在判断语句中,常用的逻辑运算符,来判断真假,常见的逻辑运算符总结如下表:

逻辑运算符解释示例 (a=0,b=20)
&&逻辑与运算符,两个操作数均为真(0),则条件为真(a&&b)为false
||逻辑或运算符,两个操作数任一为真(0),则条件为真(a||b)为true
逻辑非运算符,用来逆转操作数的逻辑状态,如果条件为真,则非运算则为假!(a&&b)为true

6、其他运算符

  C++中还有其他一些重要的运算符,总结如下表:

运算符解释示例 (a=10
sizeof返回变量大小。sizeof(a)=4,a为整型
Condition?X:Y条件运算符,Condition 为真,赋值为X:否则赋值为Y——
.(点) ->(箭头)成员运算符,用于引用类、结构、共用体的成员——
Cast强制运算符,将某类数据类型强制转换为另一类数据类型int(2.7854)=2
&指针运算符,获取变量地址&a;将会输出a的实际内存地址
*指针运算符,指向一个变量*c,指向变量c

7、运算符优先级

  上述运算符,如果同时出现,必然会有运算先后顺序。在数学四则运算中,先乘除后加减。C++中也有对应的优先级。总结如下表(从高到低):

类别运算符顺序
后缀()、[]、->、 ++、 –从左到右
一元+ 、- 、!、~、++、-- 、(type) 、* 、& 、sizeof从右往左
乘除* 、/ 、 %从左到右
加减+ 、-从左到右
移位<< 、>>从左到右
关系< 、<=、 >、 >=从左到右
相等== 、!=从左到右
位与 AND&从左到右
位异或 XOR^从左到右
或 OR|从左到右
逻辑与 AND&&从左到右
逻辑或 OR||从左到右
条件?:从右到左
赋值=、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=从右到左
逗号从左到右

8、总结

  最后,长话短说,大家看完就好好动手实践一下,切记不能三分钟热度、三天打鱼,两天晒网。大家也可以自己尝试写写博客,来记录大家平时学习的进度,可以和网上众多学者一起交流、探讨,我也会及时更新,来督促自己学习进度。一开始提及的博主【AI菌】,个人已关注,并订阅了相关专栏(对我有帮助的),希望大家觉得不错的可以点赞、关注、收藏

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cqy阳

预祝上岸,感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值