1、设置某个位(Set a Bit)
为了设置(即将某个位置1),我们使用**按位或(|
)**运算符。
操作方法:
number = number | (1 << n);
n
是你想设置的位,1 << n
表示将 1
左移 n
位,构造一个位掩码,其中只有第 n
位为 1
,其余为 0
。
使用按位或(|
)运算符可以将指定的位设置为1
,而不会影响其他位。
#include <stdio.h> int main() { int number = 0; // 初始化为0,二进制:0000 int n = 2; // 设置第2位(从右到左,0-indexed) number = number | (1 << n); // 设置第2位为1 printf("Number after setting bit %d: %d\n", n, number); // 输出4,二进制:0100 return 0; }
2、 清除某个位(Clear a Bit)
为了清除某个位(即将某个位置0
),我们使用**按位与(&
)运算符和按位取反(~
)**来创建掩码。
操作方法:
number = number & ~(1 << n);
~(1 << n)
构造一个掩码,其中第 n
位为0
,其余位为 1
。然后使用按位与(&
)运算符清除第 n
位,而不影响其他位。
#include <stdio.h> int main() { int number = 7; // 初始化为7,二进制:0111 int n = 1; // 清除第1位(0-indexed) number = number & ~(1 << n); // 清除第1位 printf("Number after clearing bit %d: %d\n", n, number); // 输出5,二进制:0101 return 0; }
3、 切换某个位(Toggle a Bit)
为了切换某个位(即将 1
变为 0
,或者将 0
变为 1
),我们使用**按位异或(^
)**运算符。
操作方法:
number = number ^ (1 << n);
1 << n
构造一个掩码,其中只有第 n
位为 1
。按位异或可以切换该位的状态。
#include <stdio.h> int main() { int number = 5; // 初始化为5,二进制:0101 int n = 2; // 切换第2位(0-indexed) number = number ^ (1 << n); // 切换第2位 printf("Number after toggling bit %d: %d\n", n, number); // 输出1,二进制:0001 return 0; }
4、检查某个位(Check a Bit)
为了检查某个位是否为 1
或 0
,我们使用**按位与(&
)**运算符。
操作方法:
bit = (number & (1 << n)) != 0;
1 << n
构造一个掩码,其中只有第 n
位为 1
。按位与可以检测该位是否为 1
。
#include <stdio.h> int main() { int number = 5; // 初始化为5,二进制:0101 int n = 2; // 检查第2位 int bit = (number & (1 << n)) != 0; // 检查第2位是否为1 printf("Bit %d is: %d\n", n, bit); // 输出1,表示第2位为1 return 0; }