1、设置第 n 位为 1
使用按位或运算符 (|
) 将第 n
位设置为 1
。
#include <iostream>
#include <bitset>
int main() {
unsigned int number = 0b00001010; // 初始值为二进制 00001010(十进制 10)
int n = 3; // 要设置第 3 位(从 0 开始计数)
std::cout << "原始 number: " << std::bitset<8>(number) << std::endl;
number |= (1U << n); // 设置第 n 位为 1
std::cout << "设置第 " << n << " 位后: " << std::bitset<8>(number) << std::endl;
std::cout << "十进制结果为: " << number << std::endl;
return 0;
}
2、清除第 n 位(设置为 0)
使用按位与运算符 (&
) 和按位取反运算符 (~
) 将第 n
位清除为 0
。
#include <iostream>
#include <bitset>
int main() {
unsigned int number = 0b1111; // 初始值,所有8位都是1(255)
int n = 3; // 想要清除第3位(从0开始数)
std::cout << "Before: " << std::bitset<8>(number) << std::endl;
number &= ~(1U << n); // 清除第 n 位
std::cout << "After : " << std::bitset<8>(number) << std::endl;
return 0;
}
3、切换第 n 位(0 变 1,1 变 0)
使用按位异或运算符 (^
) 切换第 n
位的值。
#include <iostream>
#include <bitset>
int main() {
unsigned int number = 0b00001010; // 二进制:00001010(十进制:10)
int n = 1;
std::cout << "原始值:\t\t" << std::bitset<8>(number) << std::endl;
// 切换第 n 位(从0开始计数)
number ^= (1U << n);
std::cout << "切换第 " << n << " 位后:\t" << std::bitset<8>(number) << std::endl;
// 再切换一次第 n 位,恢复原值
number ^= (1U << n);
std::cout << "再次切换第 " << n << " 位:\t" << std::bitset<8>(number) << std::endl;
return 0;
}
4、检查第 n 位的值
要检查第 n
位是否为 1
,可以使用按位与运算符 (&
)。
#include <iostream>
int main() {
unsigned int number = 42; // 二进制: 00101010
int n = 3; // 检查第 3 位(从 0 开始,低位向高位)
bool isSet = (number >> n) & 1U;
std::cout << "第 " << n << " 位是 " << (isSet ? "1(已设置)" : "0(未设置)") << std::endl;
return 0;
}
5、将第 n 位设置为特定值 x(0 或 1)
要将第 n
位设置为特定值 x
,可以先清除该位,然后根据 x
的值设置。
#include <iostream>
#include <bitset>
void setBit(unsigned int& number, unsigned int n, unsigned int x) {
number = (number & ~(1U << n)) | ((x & 1U) << n);
}
int main() {
unsigned int number = 0b10101010; // 初始值:170
std::cout << "原始 number: " << std::bitset<8>(number) << std::endl;
// 将第 3 位设置为 1
setBit(number, 3, 1);
std::cout << "设置第 3 位为 1: " << std::bitset<8>(number) << std::endl;
// 将第 7 位设置为 0
setBit(number, 7, 0);
std::cout << "设置第 7 位为 0: " << std::bitset<8>(number) << std::endl;
return 0;
}