优秀的编程知识分享平台

网站首页 > 技术文章 正文

C语言的位运算基本操作演示(c语言位运算的运算规则)

nanyue 2024-09-12 15:53:53 技术文章 9 ℃

演示,随便看看即可。

#include <stdio.h> // 引入标准输入输出头文件,以便我们可以使用 printf 和 scanf 等函数

// 设置第n个位为1
unsigned int set_bit(unsigned int num, int n) {
return num | (1 << n); // 使用按位或操作符将 num 与 1 左移 n 位的结果相或
}

// 清除第n个位为0
unsigned int clear_bit(unsigned int num, int n) {
return num & ~(1 << n); // 使用按位与操作符将 num 与 1 左移 n 位后取反的结果相与
}

// 切换第n个位
unsigned int toggle_bit(unsigned int num, int n) {
return num ^ (1 << n); // 使用按位异或操作符将 num 与 1 左移 n 位的结果相异或
}

// 获取第n个位的值
int get_bit(unsigned int num, int n) {
return (num >> n) & 1; // 使用右移操作符将 num 右移 n 位,然后使用按位与操作符与 1 相与得到第 n 位的值
}


int main() {
unsigned int num = 0b0011; // 3 in decimal /
/ 初始化一个无符号整数变量 num,其值为二进制 0011,即十进制 3
int n = 1; // We will work with the second least significant bit // 初始化一个整数变量 n,表示我们将要操作的位是第 1 位(从右往左数第二位)

printf("Original number: %d (binary: %b)\n", num, num); // 输出原始数字 num 的十进制和二进制形式
// 注意:这里使用的 %b 不是标准 C 语言的一部分,需要自己定义一个宏来支持这种格式

// 设置第 n 位为 1
unsigned int num_set = set_bit(num, n); // 调用 set_bit 函数,设置 num 的第 n 位为 1,并将结果赋给 num_set
printf("After setting bit %d: %d (binary: %b)\n", n, num_set, num_set); // 输出设置了第 n 位后的结果

// 清除第 n 位为 0
unsigned int num_cleared = clear_bit(num_set, n); // 调用 clear_bit 函数,清除 num_set 的第 n 位,并将结果赋给 num_cleared
printf("After clearing bit %d: %d (binary: %b)\n", n, num_cleared, num_cleared); // 输出清除了第 n 位后的结果

// 切换第 n 位
unsigned int num_toggled = toggle_bit(num_cleared, n); // 调用 toggle_bit 函数,切换 num_cleared 的第 n 位,并将结果赋给 num_toggled
printf("After toggling bit %d: %d (binary: %b)\n", n, num_toggled, num_toggled); // 输出切换了第 n 位后的结果

// 获取第 n 位的值
int bit_value = get_bit(num_toggled, n); // 调用 get_bit 函数,获取 num_toggled 的第 n 位的值,并将结果赋给 bit_value
printf("Value of bit %d: %d\n", n, bit_value); // 输出第 n 位的值

return 0; // 主函数结束
}


宏定义

#define PRINT_BINARY(num) \

do { \
int i; \
unsigned int mask = 1 << (sizeof(num) * 8 - 1); \
for (i = 0; i < (sizeof(num) * 8); i++) { \
putc((num & mask) ? '1' : '0', stdout); \
mask >>= 1; \
} \
} while (0)

这个程序实现了以下功能:

1. **设置位** (`set_bit`函数):

- 将给定数字`num`的第`n`位设置为1。

- 这是通过使用按位或(`|`)操作符将`num`与`1`左移`n`位的结果相或来实现的。

2. **清除位** (`clear_bit`函数):

- 将给定数字`num`的第`n`位设置为0。

- 这是通过使用按位与(`&`)操作符将`num`与`1`左移`n`位后取反的结果相与来实现的。

3. **切换位** (`toggle_bit`函数):

- 切换给定数字`num`的第`n`位的状态(如果原来是0则变为1,如果是1则变为0)。

- 这是通过使用按位异或(`^`)操作符将`num`与`1`左移`n`位的结果相异或来实现的。

4. **获取位的值** (`get_bit`函数):

- 获取给定数字`num`的第`n`位的值(0或1)。

- 这是通过使用右移操作符(`>>`)将`num`右移`n`位,然后使用按位与(`&`)操作符与`1`相与来实现的。


在`main`函数中,程序执行了以下步骤:

1. **初始化变量**:

- 创建一个无符号整数`num`,其初始值为二进制`0011`(十进制3)。

- 定义一个整数`n`,表示将要操作的是第1位(从右往左数第二位)。

2. **输出原始数字**:

- 输出原始数字`num`的十进制和二进制形式。

3. **设置位**:

- 调用`set_bit`函数,设置`num`的第`n`位为1,并将结果赋给`num_set`。

- 输出设置了第`n`位后的结果。

4. **清除位**:

- 调用`clear_bit`函数,清除`num_set`的第`n`位,并将结果赋给`num_cleared`。

- 输出清除了第`n`位后的结果。

5. **切换位**:

- 调用`toggle_bit`函数,切换`num_cleared`的第`n`位,并将结果赋给`num_toggled`。

- 输出切换了第`n`位后的结果。

6. **获取位的值**:

- 调用`get_bit`函数,获取`num_toggled`的第`n`位的值,并将结果赋给`bit_value`。

- 输出第`n`位的值。

Tags:

最近发表
标签列表