============================ 【说明】 ===================================================
大家好,本专栏主要是跟学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;
}
我们发现,再次输出a
和b
时,a
的值变为11
,b
值依旧为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变0 | a(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菌】,个人已关注,并订阅了相关专栏(对我有帮助的),希望大家觉得不错的可以点赞、关注、收藏