(一)概念
程序中所有的数在内存中是以二进制形式储存的,位运算就是对整数在内存中的二进制位进行操作
① bitset类似于一个bool类型的数组,里面的元素可以使用b[n]访问
② bitset大小在编译时就要确定,最多为32
③定义
#include <iostream>
#include <string>
#include <bitset>
using namespace std;
int main ()
{
bitset<16> b1;
bitset<16> b2 (0xfa2);
bitset<16> b3 ("0101111001");
cout << "b1: " << b1 << '\n';
cout << "b2: " << b2 << '\n';
cout << "b3: " << b3 << '\n';
return 0;
}
输出结果:
b1: 0000000000000000
b2: 0000111110100010
b3: 0000000101111001
(二)运算
① a & 1
取二进制的最末位,0为偶数,1为奇数
② a | 1 -1
把a变为偶数
③ a << 2
表示a*2
④ a >> 2
表示a/2
⑤ 异或
不同为1,相同为0
▶ 特点
0 ^ a = a; //0异或任何数不变
1 ^ a = a取反 //1异或任何数任何数取反
a ^ a = 0 //任何数异或自己==把自己置0
▶ 用途
Ⅰ使某些特定的位翻转
10100001^00000110 = 10100111(第2,3位反转)
Ⅱ 交换两数
a=a^b;
b=a^b;
a=a^b;
(三)有关函数
b1.size()
返回位数
b1.count()
返回1的个数
b1.to_string()
转换为string的结果