网站首页 > 技术文章 正文
演示,随便看看即可。
#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`位的值。
猜你喜欢
- 2024-09-12 c++ printf 到 std::cout(c++怎么用printf输出整数)
- 2024-09-12 C 语言未初始化的局部变量是多少?
- 2024-09-12 大话C语言:函数(c语言函数视频讲解)
- 2024-09-12 每日一题||C语言刷题(c语言刷题网)
- 2024-09-12 大话C语言:逗号运算符及运算法优先级
- 2024-09-12 C语言学习篇(14)-----sizeof运算符
- 2024-09-12 C语言 include的用法(c语言include的用法与搭配)
- 2024-09-12 编写一个C程序,输入a,b,c三个值,输出其中最大值
- 2024-09-12 C语言如何实现大数相加(c语言大数相加思路)
- 2024-09-12 看了这几个C语言例子,你一定会说5个哇塞,声音一次比一次大
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)