本文共 1710 字,大约阅读时间需要 5 分钟。
位运算符是作用于整数的运算对象,把运算对象看成二进制的集合。
运算符 | 功能 | 用法 |
~ | 按位求反 | ~expr |
<< | 按位左移 | expr1 << expr2 |
>> | 按位右移 | expr1 >> expr2 |
& | 按位与 | expr1 & expr2 |
^ | 按位异或 | expr1 ^ expr2 |
| | 按位或 | expr1 | expr2 |
int j = 10;cout << (~j) << endl;//-11
int j = 10;cout << (j << 2) << endl;//40
int j = 10;cout << (j >> 2) << endl;//2j = -10;cout << (j >> 2) << endl;//-3
int j = 10;int i = 3;cout << (j & i) << endl; //2
int j = 10;int i = 3;cout << (j | i) << endl; //11
int j = 10;int i = 3;cout << (j ^ i) << endl; //9
按位与(&),两个都是1,才是1。按位或(|),只要有一个为1,就是1。按位异或(^),相同的为0,不同的为1。
unsigned long quiz1 = 0;
这里之所以使用long而不是用int,是因为long在每台机器上至少都有32位(有30个学生,可以满足要求),而int不能保证在每台机器上都有32位(int的最小大小是16位)。
教师必须有权检查每一个二进制位。例如:我们需要对序号为27的学生进行对应的位设置,以表示它通过测验。为了达到这一目的,首先创建一个值,该值只有第27位是1,其它位是0,然后再将这个值与quiz1进行或运算,这样就能将quiz1的第27位设置为1,其它位不变。为了实现这个目的,需要使用左移运算符和一个unsigned long类型的整数字面值1就能得到学生第27号学生通过检测的数值:1UL << 27;//UL 是unsigned long类型
quiz1 |= 1UL << 27;//将第27位改为1(通过测试)
quiz1 &= ^(1UL << 27);//将第27位改为0(未通过测试)
bool status = quiz1 & (1UL << 27);
如果quiz1的第27位是1,那么计算结果就是非0(真),否则结果是0。
转载地址:http://yshzz.baihongyu.com/