位运算及其应用
2014-03-25 19:01
239 查看
位运算的优点之一是高效,而且它能在处理一些问题时使代码变得非常简洁
位运算操作符见下表
此外还有<<=,>>=,&=,^=,|=这些复合赋值运算符=
与位运算相关的技巧与应用
1.计算 n 与 2的m次方 的乘积
2.判断n的奇偶(奇数返回1,偶数返回0)
3.不用中间变量交换两个整数
4.判断n是否为2的整数冥
5.相关位操作
位运算操作符见下表
优先级 | 运算符 | 用法 | 描述 |
1 | ~ | ~expr | 将expr每位翻转 0变1,1变0 |
2 | << | expr<<n | 将expr向左移动n位 左舍弃右补0 相当于乘以2的n次方 |
2 | >> | expr>>n | 将expr向右移动n位 左补0(拷贝插入符号位)右舍弃 相当于除以2的n次方 |
3 | & | expr1&expr2 | 若expr1和expr2的相同位上都为1则该位结果为1 否则为0 |
4 | ^ | expr1^expr2 | 若expr1和expr2的相同位上不同则该位结果为1 否则为0 |
5 | | | expr1|expr2 | 若expr1和expr2的相同位上都为0则该位结果为1 否则为0 |
与位运算相关的技巧与应用
1.计算 n 与 2的m次方 的乘积
n<<m;
2.判断n的奇偶(奇数返回1,偶数返回0)
n&1;
3.不用中间变量交换两个整数
void swap (int *a, int *b) { (*a) ^= (*b) ^= (*a) ^= (*b); }
4.判断n是否为2的整数冥
n > 0 ? (n & (n - 1)) == 0 : false;
5.相关位操作
n|=(1<<m);//将n二进制的第m位置1 n&=~(1<<m);//将n二进制的第m位置0 n^=(1<<m);//将n二进制的第m位翻转 bool jud=n&(1<<m);//判断n的第m位是否为1