位运算
一、关键点
作用对象:整型(如果运算对象是“小整型”,则它的值会被自动提升成较大的整数类型),把运算对象看成是二进制位的集合
功能:检查和设置二进制位
如果运算对象是带符号的且它的值为负,则位运算符如何处理运算对象的“符号位”依赖于机器,故我们推荐使用位运算符处理无符号类型。
二、示例
1. 用于数组的维度
int a[1<<2]; //等价于int a[100];
2. 设置和检查二进制位
unsigned int a = 0; //32个二进制位,每位都是0 a = a | 1u << 3; //设置第3位为1,1u为一个unsigned类型的整数字面值 cout << a << endl; //输出8
1u << 3; //该整数只有第3位是1,其他位都是0 ~(1u << 3); //该整数只有第3位是0,其他位都是1
三、移位运算符的优先级和结合律
尽管很多程序员从未直接使用过位运算符,但几乎所有人都用过它们的重载版本来进行IO操作。
重载运算符的优先级和结合律都与它的内置版本一样。
1. 移位运算符满足左结合律
2. 移位运算符的优先级不高不低:比算术运算符低,高于关系/赋值/条件运算符