C语言经典程序:按位操作实例

需积分: 3 1 下载量 201 浏览量 更新于2024-09-15 收藏 32KB DOC 举报
"C语言经典程序100例包含了一些基础且重要的C语言编程示例,如按位与、按位或、按位异或的操作,以及如何提取整数的特定位段。" 在C语言中,位操作是底层编程的重要组成部分,尤其是在处理硬件接口和优化内存操作时。以下是对这些程序的详细解释: 1. **按位与(&)**: 按位与操作符`&`用于比较两个二进制数的每个位,只有当两个位都为1时,结果位才为1,否则为0。例如,`0&0=0;0&1=0;1&0=0;1&1=1`。程序51演示了如何使用按位与来保留特定位,例如将变量`a`的值与3进行与操作,这会保留`a`的低两位。 ```c #include"stdio.h" main() { int a, b; a = 077; // 八进制数,转换为十进制是63 (111111) b = a & 3; // 与3 (000011) 进行按位与,保留低两位 printf("The a&b (decimal) is %d\n", b); b &= 7; // 再次与7 (0000111) 进行按位与,进一步改变b的值 printf("The a&b (decimal) is %d\n", b); } ``` 2. **按位或(|)**: 按位或操作符`|`对两个二进制数的每个位进行比较,如果至少有一个位为1,则结果位为1,否则为0。例如,`0|0=0;0|1=1;1|0=1;1|1=1`。程序52展示了如何使用按位或来设置或保留某些位。 ```c #include"stdio.h" main() { int a, b; a = 077; b = a | 3; // 与3进行按位或,设置低两位 printf("The a|b (decimal) is %d\n", b); b |= 7; // 再次与7进行按位或,进一步改变b的值 printf("The a|b (decimal) is %d\n", b); } ``` 3. **按位异或(^)**: 按位异或操作符`^`比较两个二进制数的每个位,如果两个位相同,则结果位为0;如果不同,则结果位为1。例如,`0^0=0;0^1=1;1^0=1;1^1=0`。程序53展示了如何使用按位异或来交换两个位或者清除某些位。 ```c #include"stdio.h" main() { int a, b; a = 077; b = a ^ 3; // 对a和3进行按位异或,交换低两位 printf("The a^b (decimal) is %d\n", b); b ^= 7; // 再次对b进行按位异或,进一步改变b的值 printf("The a^b (decimal) is %d\n", b); } ``` 4. **提取整数的特定位段**: 程序54展示了一个技巧,通过位移和按位与来提取一个整数的特定位段。在这个例子中,我们提取一个整数`a`从右端开始的4~7位。首先将`a`右移4位,然后用一个掩码(低4位为1,其余为0)进行按位与操作。 ```c main() { unsigned a, b, c, d; scanf("%o", &a); // 输入八进制数 b = a >> 4; // 右移4位 c = ~(~0 << 4); // 创建掩码,所有位为1,然后左移4位,再取反得到低4位为1,其余为0 d = b & c; // 提取4~7位 printf("%o\n%o\n", a, d); } ``` 这些程序实例帮助初学者理解C语言中位操作的概念,它们在实际编程中用于数据处理、位标志设置、内存管理等场景。通过学习这些基本操作,程序员可以更有效地处理二进制数据,提升编程效率和代码质量。