C++的一些运算符
一、位运算符
1、按位与运算符(&)
描述
(&): 对两个参与运算的对象,按照二进制位进行(与)运算。
运算规则:
a | b | a & b |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
【运算口诀:一假同假。(只要有一个是假的,结果即为假。(当a、b全为真时,结果才为真))】
e.g. :3 & 6, 3 = 0011, 6 = 0110 ,0011 & 0110 = 0010.
所以,3 & 6 = 2
用法
1 求一个数的二进制
int n = 9;
while (n){
cout << (n & 1);
n = n >> 1;
}
输出结果:1001
2、按位或运算符(|)
描述
(|): 对两个参与运算的对象,按照二进制位进行(或)运算。
运算规则:
a | b | a | b |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
【运算口诀:一真同真(只要是一个为真,结果即为真, (当a、b全为0时,结果为假))】
e.g.: 3 & 6, 3 = 0011, 6 = 0110 ,0011 | 0110 = 0111.
所以,3 | 6 = 7.
用法
暂无
3、异或运算符(^)
描述
对参与运算的两个对象,按二进制位进行(异或)运算。
运算规则:
a | b | a^b |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
【口诀:相异为真(如果两个的真值不同,则结果为真,如果两个的真值相同,结果位假】
用法
1.将字符转为数字;
char c;
int x = c ^ 48;
cout << x << endl;
结果:
c = `0`, x = 0;
c = `1`, x = 1;
......
c = `9`, x = 9;
c = `a`, x = 81;
4、取反运算符(~)
描述
(~):对一个参与运算的对象,按照二进制位进行(取反)运算。
运算规则:
a | ~a |
---|---|
0 | 1 |
1 | 0 |
【运算口诀:(对真值取反(0 变成 1, 1 变成 0)】
用法
1.使一个数的最低位为0, 可以表示为:a&~1
.
解释:~1的值为1111 1111 1111 1110, 再按”与“运算,最低位一定为0。因此~
的优先级比算术运算符、关系运算符、逻辑运算符和其他运算符都高。
5、右移运算符(>>)
描述
(>>)将一个参与运算的对象的各二进制位全部右移若干位(右边的二进制位丢弃,左边补零(也相当于除以若干次2)
a | 左移位数n | a >>= n | 二进制表示 |
---|---|---|---|
15 | 0 | 15 | 1111 |
15 | 1 | 7 | 0111 |
15 | 2 | 3 | 0011 |
15 | 3 | 1 | 0001 |
15 | 4 | 0 | 0000 |
用法
暂无
6、左移运算符(<<)
描述
(<<) 将参与运算的对象的各二进制位全部向左移若干位(左边的二进制位丢弃,右边的二进制位补零(相当于乘上若干次2)
a | 左移位数n | a <<= n | 二进制表示 |
---|---|---|---|
0 | 0 | 0 | 0000 |
1 | 0 | 1 | 0001 |
1 | 1 | 2 | 0010 |
1 | 2 | 4 | 0100 |
1 | 3 | 8 | 1000 |
用法
暂无