个人主页:Lei宝啊
愿所有美好如期而遇
目录
前言
1.基础位运算
&运算
|运算
^运算
>>运算
<<运算
~运算
2.给一个数n,确定他的二进制表示中的第x位,是0还是1
3.将一个数n的二进制表示的第x位修改成1
4.将一个数n的二进制表示的第x位修改成0
5.位图的思想
6.提取一个数n二进制表示中最右侧的1
7.干掉一个数n二进制表示中最右侧的1
8.位运算的优先级
9.异或运算的运算律
前言
在开始本篇文章时,建议了解 原码,反码,补码以及计算
1.基础位运算
&运算
按照补码进行按位与
- 0 & 0 = 0
- 0 & 1 = 0
- 1 & 1 = 1
|运算
按照补码进行按位或
- 0 | 0 = 0
- 1 | 0 = 1
- 1 | 1 = 1
^运算
- 按位异或,相同为0,不同为1
- 不进位相加
按照补码进行按位异或
- 0 ^ 0 = 0
- 0 ^ 1 = 1
- 1 ^ 1 = 0
>>运算
每向右移动一位,相当于除以2
<<运算
每向左移动一位,相当于乘以2
~运算
每个比特位按位取反。
2.给一个数n,确定他的二进制表示中的第x位,是0还是1
#include <iostream>
using namespace std;
//给一个数n,确定他的二进制表示中的第x位,是0还是1
int main()
{
int n, x;
//cin >> n >> x;
//000101000000111011011000
n = 1314520;
x = 6;
cout << (1 & (n >> (x - 1))) << endl;
return 0;
}
3.将一个数n的二进制表示的第x位修改成1
#include <iostream>
using namespace std;
//将一个数n的二进制表示的第x位修改成1
int main()
{
int n, x;
//cin >> n >> x;
//000101000000111011011000
n = 1314520;
x = 6;
n |= 1 << (x - 1);
cout << n;
return 0;
}
4.将一个数n的二进制表示的第x位修改成0
#include <iostream>
using namespace std;
//将一个数n的二进制表示的第x位修改成0
int main()
{
int n, x;
//cin >> n >> x;
//000101000000111011011000
n = 1314520;
x = 7;
n &= ~(1 << (x - 1));
cout << n;
return 0;
}
5.位图的思想
用一个变量的某个比特位表示某种状态,0表示假,1表示真,我们看图:
在进程的切换与调度中,底层就使用位图去标识运行队列是否为空,还有一个就是Linux下文件类系统调用中,有一个open系统调用,他的第二个参数flags,都是利用了位图。
6.提取一个数n二进制表示中最右侧的1
#include <iostream>
using namespace std;
//提取一个数n二进制表示中最右侧的1
int main()
{
int n, x;
//cin >> n >> x;
//000101000000111011011000 n
//111010111111000100101000 -n
n = 1314520;
x = 7;
n &= -n;
cout << n;
return 0;
}
-n:n二进制表示中,最右边1的左边二进制数全部取反。
7.干掉一个数n二进制表示中最右侧的1
#include <iostream>
using namespace std;
//干掉一个数n二进制表示中最右侧的1
int main()
{
int n, x;
//cin >> n >> x;
//000101000000111011011000 n
//111010111111000100101000 -n
n = 1314520;
x = 7;
//000000000000000000001000 n & -n
n ^= n & -n;
cout << n;
return 0;
}
#include <iostream>
using namespace std;
//干掉一个数n二进制表示中最右侧的1
int main()
{
int n, x;
//cin >> n >> x;
//000101000000111011011000 n
n = 1314520;
x = 7;
n &= n - 1;
cout << n;
return 0;
}
n-1 :最右边的1及其右边全部取反
8.位运算的优先级
这里推荐,如果使用位运算,不确定优先级,那么就加括号。
9.异或运算的运算律
- a ^ 0 = a
- a ^ a = 0
- a ^ b ^ c = a ^ (b ^ c)