1.算数运算符
算术运算符与我们在数学中学习的计算符号一样,主要用在数学表达式中
int a=5,b=3;
符号 | 功能 | 示例 |
+ | 计算两个数字的和 | a+b 结果为8 |
- | 前面的数减去后面的数 | a-b 结果为2 |
* | 计算两个数字的乘积 | a*b 结果为15 |
/ | 前面的数除以后面的数的商 | a/b 结果为1 |
% | 前面的数除以后面的数的余数 | a%b 结果为2 |
++ | 自增运算符,整数值增加 1 | a++ 结果为a=6 |
-- | 自减运算符,整数值减少 1 | a-- 结果为a=4 |
代码示例:
#include<iostream>
using namespace std;
int main(){
int a=5,b=3;
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;
}
运行结果是:
a+b的值是:8
a-b的值是:2
a*b的值是:14
a/b的值是:1
a%b的值是:2
自增运算详解:
自增运算分为前面自增(++a),和后面自增(a++)
++a 表示:先让a的值增加1,再使用a
a++ 表示:先使用a,再让a的值增加1
#include<iostream>
using namespace std;
int main(){
int a=3;
a++; //这行代码结束后a=4;
cout << a << endl; //输出结果是4
cout << a++ << endl;//输出结果是4
cout << a << endl; //输出结果为5
//在上面那一行代码中,我们要输出a的值(要用到a),而++运算在后面,所以就是先使用a的值4,然后a的值变为5
cout << ++a << endl;//输出结果为6
cout << a << endl; //输出结果为6
return 0;
}
减法可以类比记忆
#include<iostream>
using namespace std;
int main(){
int a=5;
a--; //这行代码结束后a=4;
cout << a << endl; //输出结果是4
cout << a-- << endl;//输出结果是4,这一行结束后a=3
cout << a << endl; //输出结果为3
cout << --a << endl;//输出结果为2
cout << a << endl; //输出结果为2
return 0;
}
2.复合运算符
复合运算符是一种缩减的写法
符号 | 示例 | 等价于 |
+= | 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 |
3.关系运算符
关系运算符用于表达式之间的大小比较,关系运算符的结果为bool型,用0和1表示
大于 | 小于 | 大于等于 | 小于等于 | 等于 | 不等于 |
> | < | >= | <= | == | != |
3.1 关系运算符的优先级低于算术运算符
例如 3+5>2+4 先算 3+5 和 2+4,然后在比较大小
3.2 >,<,>=,<=的优先级相同,高于==和!=
例如 3<5==4>2 先算 3<5 和 4>2,然后再算 ==
4.逻辑运算符
对表达式或者变量做出逻辑判断的运算符
逻辑与 | 逻辑或 | 逻辑非 |
&& | || | ! |
4.1逻辑与(双目运算符)
a | 1 | 1 | 0 | 0 |
b | 1 | 0 | 1 | 0 |
a&&b的值 | 1 | 0 | 0 | 0 |
&& 只有两边都是真(1),结果才为真(1)
4.2逻辑或 (双目运算符)
a | 1 | 1 | 0 | 0 |
b | 1 | 0 | 1 | 0 |
a||b的值 | 1 | 1 | 1 | 0 |
|| 两边有1个是真(1),结果就是真(1)
4.3 逻辑非 (单目运算符)
a | 1 | 0 |
!a的值 | 0 | 1 |
非真(1)即假(0),非假(0)即真(1)
4.4 逻辑运算符的优先级
逻辑非(!)> 逻辑与(&&)> 逻辑或(||)
例如:a || b && ! c 先计算!c,再计算b&&__,最后计算a|| __
5.位运算
位运算直接对整数在内存中的二进制位进行运算。
与 | 或 | 非 | 异或 | 左移 | 右移 |
& | | | ~ | ^ | << | >> |
5.1 与(&)
将参与运算的两个操作数各自对应的二进制位进行“逻辑与”操作,只有对应的两个二进制位均为1,对应二进制位的运算结果才是1,否则为0。
例如:12 & 5 -> 1100 & 0101 -> 0100 = 4
5.2 或(|)
将参与运算的两个操作数各自对应的二进制位进行“逻辑或”操作,只有对应的两个二进制位均为0,对应二进制位的运算结果才是0,否则为1。
例如:12 | 5 -> 1100 | 0101 -> 1101 = 13
5.3 非(~)
单目运算,将操作数中的二进制位0变成1,1变成0。
5.4 异或(^)
将参与运算的两个操作数各自对应的二进制位进行“异或”操作,当对应的两个二进制位不相同时,对应二进制位的运算结果是1,否则为0。相同为0,不同为1。
一个数字异或另一个数字两次,结果不变。
#include<iostream>
using namespace std;
int main(){
int a=3,b=5;
a=a^b;
a=a^b;
cout << a << endl; //结果为:3
return 0;
}
交换两个变量的值
#include<iostream>
using namespace std;
int main(){
int a=3,b=5;
a=a^b;
b=a^b;
a=a^b;
cout << a << " " << b << endl; //结果为:5 3
return 0;
}
5.5 左移(<<)
单目运算,将操作数对应的二进制向左移动若干位。左移时,高位丢弃,右边低位补0。左移n位就相当于乘2的n次方。
5.6 右移(>>)
单目运算,右移运算的操作方式和左移运算类似,不同的是移动方向,移出最右边的位被丢弃。同样,右移n 位相当于左操作数除以 2的n次方,并且将结果向下取整。对于无符号数,右移时高位总是补 0。对于有符号数,在右移时,符号位(即最高位)一起移动。如果原符号位为 1(代表负数),则右移时右边高位都补 1:如果原符号位为 0(代表正数),则右移时高位补 0,即保持原有的正负。