位运算通过操作二进制位提升效率,常用于优化与底层编程。C++支持&(与)、|(或)、^(异或)、~(取反)、(右移)等运算符。常用技巧包括:用n & 1判断奇偶,a ^ b ^ b实现交换,n & (n – 1)清除最低位的1,n & (-n)提取最低位的1,n > 0 && (n & (n – 1)) == 0判断2的幂,以及用mask遍历子集。实际应用如异或求唯一数、位标记权限等,广泛用于算法与系统编程。

在C++中,位运算是直接对整数的二进制位进行操作的技术,效率高、速度快,常用于优化算法和底层编程。掌握位运算不仅能提升代码性能,还能简化某些逻辑判断。下面介绍常用位运算符及其技巧与实际应用。
基本位运算符
以下是C++中支持的位运算符:&(按位与):两个对应位都为1时结果才为1|(按位或):任一对应位为1则结果为1^(按位异或):对应位不同时为1,相同时为0~(按位取反):每一位0变1,1变0:左移n位相当于乘以2^n>>(右移):右移n位相当于除以2^n(向下取整)
例如:
int a = 5; // 二进制: 101
int b = 3; // 二进制: 011
cout
cout
cout
cout
常用技巧与应用场景
1. 判断奇偶性
通过判断最低位是否为1来确定奇偶:
立即学习“C++免费学习笔记(深入)”;
if (n & 1) {
cout
} else {
cout
}
2. 交换两个数不用临时变量
利用异或的性质:a ^ a = 0,a ^ 0 = a
a = a ^ b;
b = a ^ b; // 相当于 a ^ b ^ b = a
a = a ^ b; // 相当于 a ^ b ^ a = b
3. 清零最低位的1
表达式 n & (n – 1) 可以快速去掉最右边的1,常用于统计1的个数:
int count = 0;
while (n) {
n &= (n – 1);
count++;
}
4. 获取最低位的1
n & (-n) 可以提取最右边的1:
int lowbit = n & (-n);
5. 判断是否为2的幂
一个数是2的幂当且仅当只有一个1,且大于0:
bool isPowerOfTwo(int n) {
return n > 0 && (n & (n – 1)) == 0;
}
6. 遍历子集(状态压缩)
在枚举某个集合的所有子集时,可以用位运算表示每个元素选或不选:
for (int mask = 0; mask
for (int i = 0; i
if (mask & (1
// 处理第i个元素被选中的情况
}
}
}
实际应用举例
1. 数组中唯一只出现一次的数
给定一个数组,除了一个数出现一次外,其余都出现两次,找出那个数。
int singleNumber(vector& nums) {
int result = 0;
for (int num : nums) {
result ^= num;
}
return result;
}
利用异或的自反性和交换律,相同数抵消,剩下唯一的数。
2. 标记状态(如权限控制)
用一个整数的不同位表示不同权限:
const int READ = 1
const int WRITE = 1
const int EXEC = 1
int permissions = READ | WRITE; // 赋予读写权限
if (permissions & EXEC) { … } // 检查是否有执行权限
基本上就这些常见用法。位运算看似简单,但组合起来非常强大,尤其在算法竞赛和系统编程中很实用。关键是理解每种操作的本质,并多加练习。
以上就是c++++怎么使用位运算_位运算技巧与应用的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1477823.html
微信扫一扫
支付宝扫一扫