基础位运算






常用位计算
给一个数n,确定它的二进制表示中的第x位是0还是1


#include <iostream>
bool checkBit(int n, int x) {
// 生成掩码,1 左移 (x-1) 位
int mask = 1 << (x - 1);
// 按位与操作,检查第 x 位
return (n & mask) != 0;
}
int main() {
int n = 13; // 二进制表示为 1101
int x = 3;
if (checkBit(n, x)) {
std::cout << "第 " << x << " 位是 1" << std::endl;
} else {
std::cout << "第 " << x << " 位是 0" << std::endl;
}
return 0;
}
将一个数n的二进制表示的第x位修改成1


#include <iostream>
int setBitToOne(int N, int x) {
// 生成掩码,1 左移 (x-1) 位
int mask = 1 << (x - 1);
// 按位或操作,设置第 x 位为 1
return N | mask;
}
int main() {
int N = 13; // 二进制表示为 1101
int x = 2;
int result = setBitToOne(N, x);
std::cout << "修改后的结果是: " << result << std::endl; // 输出修改后的数值
//std::cout << "二进制表示: " << std::bitset<8>(result) << std::endl; // 输出二进制表示
return 0;
}
将一个数n的二进制表示的第x位修改成0


#include <iostream>
int clearBitToZero(int N, int x) {
// 生成掩码,1 左移 (x-1) 位
int mask = 1 << (x - 1);
// 对掩码取反,然后与 N 进行按位与操作
return N & ~mask;
}
int main() {
int N = 13; // 二进制表示为 1101
int x = 3;
int result = clearBitToZero(N, x);
std::cout << "修改后的结果是: " << result << std::endl; // 输出修改后的数值
return 0;
}
提取一个数n二进制表示中最右侧的1


#include <iostream>
int extractRightmostOne(int n) {
return n & -n;
}
int main() {
int n = 18; // 二进制表示为 10010
int result = extractRightmostOne(n);
std::cout << "最右侧的1: " << result << std::endl; // 输出结果
std::cout << "二进制表示: " << std::bitset<8>(result) << std::endl; // 输出二进制表示
return 0;
}
删除一个数n二进制表示中最右侧位的1


#include <iostream>
int clearRightmostOne(int n) {
return n & (n - 1);
}
int main() {
int n = 18; // 二进制表示为 10010
int result = clearRightmostOne(n);
std::cout << "清除最右侧的1后的结果: " << result << std::endl; // 输出结果
return 0;
}