文章目录
展开这篇拖的有点长
军训刚结束,就来赶文章了
我相信你们不会听我解释的
那么就直接进入正文吧
这篇又是大量理解背诵内容
大家准备好脑子好好看
0 算术运算符
0.0 什么是运算符
来自百度百科:“运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算。”
大家在平时接触的基本运算就是加减乘除。
那么c++中包含怎样的运算符呢?
0.1 一元运算符
一元运算符,就是只含有一个操作数。主要包含正号(+),符号(-),增一(++),减一(–)。
例如:
1 2 3 4 5 6 7 8 9 10 |
#include <iostream> using namepsace std; int main() { int a=+1,b=-1;//也可写为a=1 a++;//a=a+1; b--;//b=b-1; return 0; } |
0.2 二元运算符
二元运算符,含有两个操作数。主要包含加(+),减(-),乘(*),除(/),余(%)。
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <iostream> using namespace std; int main() { int a=2,b=3,c,d,e,f,g; c=a+b; d=b-a; e=a*b; f=b/a;//因为是整型变量,所以自动向下取整 g=a%b;//取余运算,又叫模,返回a除b的余数 return 0; } |
0.3 一点区别
当然,增一除了a++,还有++a。
区别是:a++是先取a的值再加,++a是先加再取a的值。
比如:a=2,b=3。
c=b*a++,就是c=3*2=6,结束后a=3。
d=b*++a,就是d=3*3=9,结束后a=3。
我们也可以看出一元运算符运算优先级是高于二元运算符的。
1 赋值运算符
赋值运算符是最常用的手段之一。
赋值运算符都是二元运算符。
①基本赋值运算符:=
将右边的常量或表达式值赋给左边的变量。
例如:
1 2 3 |
i=3;//将右边的常量赋给左边的变量 i=j+1;//将右侧表达式的值赋给左侧的变量 |
值得注意的是这里j的值是不变的。
大家可以结合上面的算术运算符,如i=j++,来观察变量值的不同。
②复合赋值运算符:+=(加赋值),-=(减赋值),*=(乘赋值),/=(除赋值),%=(余数赋值),<<=(左移赋值),>>=(右移赋值),&=(按位与赋值),|=(按位或赋值),^=(按位异或赋值)。
例如:
1 2 3 4 5 6 7 8 9 10 11 |
i+=2; //等价于i=i+2 i-=2; //等价于i=i-2 i*=2; //等价于i=i*2 i/=2; //等价于i=i/2 i%=2; //等价于i=i%2 i<<=2; //等价于i=i<<2 i>>=2; //等价于i=i>>2 i&=2; //等价于i=i&2 i|=2; //等价于i=i|2 i^=2; //等价于i=i^2 |
移位运算符和位运算符会在后续章节介绍。
赋值运算符的优先级很低,仅仅高于逗号运算符。
所以:
i+=3+2*2等价于:i=i+(3+2*2);
先做算术运算符再做赋值运算符。
2 逻辑运算符
2.0 类型
一元运算符:!(逻辑非)。
二元运算符:&&(逻辑与),||(逻辑或)。
逻辑表达式的值为逻辑值,即布尔值(bool)。
一般情况下,只有0被判断为逻辑假值(false),一切非0均可被判断为逻辑真值(true)。
在存储和表示是,通常使用1表示逻辑真值,0表示逻辑假值。
- 逻辑非(!):即取反,逻辑值为真,取非后为假;逻辑值为假,取非后为真。
- 逻辑与(&&):两个操作数均为逻辑真时,结果为真;否则为假。
- 逻辑或(||):两个操作数均为逻辑假时,结果为佳;否则为真。
2.1 应用
一般逻辑运算符应用在分支结构较多。
如我们上节课提过的:
比如我们要判断一个人的年龄范围。
我们规定0~5岁为儿童,6~17岁为青年,18~59岁为中年,60岁以上为老年。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <iostream> using namespace std; int main() { int x; cin>>x; if(x>=0&&x<=5)printf("Children's group."); if(x>=6&&x<=17)printf("Youth group."); if(x>=18&&x<=59)printf("Middle-aged group."); if(x>=60)printf("Elderly group."); return 0; } |
在这里我们就丰富运用了逻辑与运算。
优先级方面:
逻辑非(!)>算术运算符>逻辑与(&&),逻辑或(||)>赋值。
3 移位运算符
位运算是指在二进制上进行操作。
分为两种,都是二元运算符:
- 左移位运算符(<<):a<<m,a和m都是整形表达式,且m>=0。表示将整数a按二进制位向左移动m位,高位移出后,低位补0。
- 右移位运算符(>>):a>>m,a和m都是整形表达式,且m>=0。表示将整数a按二进制位向右移动m位,低位移出后,高位补0。
比如,4<<1,4的二进制数为00000100,左移一位变成00001000,答案为8。
所以<<1可以理解为乘2,>>1可以理解为除2。(在不冒位的情况下)
负数因为有符号位,大家可以自行尝试讨论。
为什么要用位运算?
听先辈们说,是因为快。
4 关系运算符
4.0 介绍
C++有6种关系运算符,都是二元运算符。
分别是:
>(大于),>=(大于等于),<(小于),<=(小于等于),= =,(等于)!=(不等于)。
对于这6种关系运算符,前4种优先级高于后两种。
4.1 实例
下面介绍关系运算符的返回值。
比如:
1 2 |
int a=1,b=2; |
- a>b:逻辑假,其值为0。
- a>=b:逻辑假,其值为0。
- a<b:逻辑真,其值为1。
- a<=b:逻辑真,其值为1。
- a= =b:逻辑假,其值为0。
- a!=b:逻辑真,其值为1。
5 位运算符
在3中我们介绍了移位运算符,这里我们介绍位运算符。
这两者都是在二进制数上操作。
C++有4种位运算符。
- 按位与(&):a&b,二元运算符,如果两个相应的二进制位都为1,则该位为1,否则为0。(类似逻辑与)
- 按位或(|):a|b,二元运算符,两个相应的二进制位中只要有一个为1,则该位为1,否则为0。
- 按位异或(^):a^b,二元运算符,如果两个相应的二进制位值相同,则该位为0,否则为1。
- 按位取反(~):~a,一元运算符,将一个二进制位0变为1,1变为0。
位运算会产生许多妙用,需要大家慢慢发现。
在这里写一小段,看看大家能不能发现这段代码的作用。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <iostream> using namespace std; int main() { int a,b; cin>>a>>b; a=a^b; b=b^a; a=a^b; cout<<a<<b<<endl; return 0; } |
6 条件运算符
条件运算符是c++中唯一的三元运算符。
格式如下:
条件?表达式1:表达式2
首先计算条件,然后根据条件的结果,决定表达式1还是表达式2。
举个例子:
1 2 |
int qMAX(int a,int b){return a>=b?a:b;} |
这是一个函数(函数会在后面讲解)。
可以理解为有a,b两个量,然后return后的条件运算符就是返回值。
在这里,我们先判断a是否大于b。如果是,我们返回表达式1,也就是a;如果不是,我们返回表达式2,也就是b。这样我们就可以快速取两个数中较大的那个。
7 优先级相关
常用的运算符的优先级总结如下,供大家参考。大致分为15个等级。
大家可以在实际应用中感受到优先级的不同带来的逻辑思考。
8 写在后面
今天的内容多为介绍,需背诵的东西较多。
加上其中有些逻辑方面的思考,大家需要自己绕一绕。
8.0 提问联系
本文有些地方有笔误或根本性问题,如有发现请及时联系博主。
有关于本文的疑问也可随时联系博主,QQ:1409111459。
当然也可以直接在下方评论区写出你的想法。
8.1 参考资料
1.关淞元 . C语言从新手到高手:中国铁道出版社有限公司,2019