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; }