1. 位操作符
1.1 位操作的定义
- 位操作:整数特有的操作。
- 位操作:<< 、>>、&、|、^、~共六个操作。
1.2 左移操作
左移操作“<<”:将整数最高位(左端)挤掉,而在右端补0。
short int a = 12;//a为0000000000001100 a = a<<1; //a为0000000000011000 =>得到a=24; 左移1位相当于乘2,不管整数a是否有符号。
1.3 右移操作
右移操作“>>”:是在整数的高位挤一个0或1进去,而整数右边的1或0被挤掉。
有符号整数,若最高位是1,则高位挤进1,若最高位是0,则高位挤进0。
无符号整数,则一律高位挤进0。short int a = -2;//a为1111111111111110 a = a>>1; //a为1111111111111111 =>得到a=-1; unsigned short int b=65535;//b为1111111111111111 b = b>>1; //b为0111111111111111 =>得到b=32767;
1.4 位与操作
位与操作“&”:将两个操作数每一位做与操作。
short int a=12; //a为0000000000001100 short int b=6;  //b为0000000000000110 a = a & b; //a为0000000000000100 =>得到a=4;
1.5 位或操作
位或操作“|”:将两个操作数每一位做或操作。
short int a=12;//a为0000000000001100 short int b=6; //b为0000000000000110 a = a | b; //a为0000000000001110 =>得到a=14;
1.6 位异或操作
位异或操作“^”:将两个操作数每一位做异或操作,异或也称对称和,或称无进位加等,若两个操作数相等(都为0或都为1,则其值为0,否则为1),对应位不同取1,对应位同为1取反为0,对应位同为0不做处理。
short int a=12;//a为0000000000001100 short int b=6; //b为0000000000000110 a = a ^ b; //a为0000000000001010 =>得到a=10;
1.7 位反操作
位反操作“~”:将一个操作数每一位取反,0变成1,1编程0。
short int a=12;//a为0000000000001100 a = ~a ; //a为1111111111110011 =>得到a=-13;
1.8 位操作也有对应的复合赋值操作
- a <<= 5; <=> a = a << 5;
- a >>= 5; <=> a = a >> 5;
- a &= b; <=> a = a & b;
- a |= b; <=> a = a | b;
- a ^= b; <=> a = a ^ b;
1.9 位操作实例
位操作可以帮助实现一些很强调空间的计算,系统编程中的状体位截取肯定用位操作,它也是标准库中bitset容器类的实现基础,有许多问题用位操作实现颇为有效。
#include<iostream> using namespace std; void print(int n) { cout<<(n&16 ? "A":"~A")<<" " <<(n&8 ? "B":"~B")<<" " <<(n&4 ? "C":"~C")<<" " <<(n&2 ? "D":"~D")<<" " <<(n&1 ? "E":"~E")<<" " <<endl; } int main() { for(int n=0; n<32; n++) { bool A=n&16, B=n&8, C=n&4, D=n&2, E=n&1; if(A && !B) continue; if(!D && !E) continue; if(B == C) continue; if(C != D) continue; if(E && !(A && B)) continue; print(n); } system("pause"); return 0; } =>编译警告: 1>warning C4800: “int”: 将值强制为布尔值“true”或“false”(性能警告) 1>warning C4800: “int”: 将值强制为布尔值“true”或“false”(性能警告) 1>warning C4800: “int”: 将值强制为布尔值“true”或“false”(性能警告) 1>warning C4800: “int”: 将值强制为布尔值“true”或“false”(性能警告) =>~A ~B C D ~E A B ~C ~D E
参考文献:
[1]《C++程序设计教程(第二版)》钱能——第四章
[2] 百度搜索关键字:C++运算符、位操作符、位操作