基础位运算






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


#include <iostream>
bool checkBit(int n, int x) {
int mask = 1 << (x - 1);
return (n & mask) != 0;
}
int main() {
int n = 13;
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) {
int mask = 1 << (x - 1);
return N | mask;
}
int main() {
int N = 13;
int x = 2;
int result = setBitToOne(N, x);
std::cout << "修改后的结果是: " << result << std::endl;
return 0;
}
将一个数n的二进制表示的第x位修改成0


#include <iostream>
int clearBitToZero(int N, int x) {
int mask = 1 << (x - 1);
return N
}
int main() {
int N = 13;
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
}
int main() {
int n = 18;
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
}
int main() {
int n = 18;
int result = clearRightmostOne(n);
std::cout << "清除最右侧的1后的结果: " << result << std::endl;
return 0;
}