C语言练习题-C语言练习题实例54
题目:取一个整数 a 从右端开始的 4~7 位。
程序分析:可以这样考虑:
- 先使
a右移 4 位。 - 设置一个低 4 位全为 1,其余全为 0 的数,可用
~(~0<<4)。 - 将上面两者进行按位与
&运算。
实例
#include <stdio.h>
int main() {
unsigned a, b, c, d;
printf("请输入整数:\n");
scanf("%o", &a);
b = a >> 4;
c = ~(~0 << 4);
d = b & c;
printf("%o\n%o\n", a, d);
return 0;
}以上实例输出结果为:
请输入整数:
36
36
1在该程序中,我们使用了位运算来取一个整数 a 从右端开始的 4~7 位。
首先,使用 scanf 函数从用户输入中读取一个八进制数,并将其赋值给变量 a。
然后,将变量 a 右移 4 位,将右端开始的 4~7 位移到最低位,结果赋值给变量 b。
接下来,设置一个低 4 位全为 1,其余全为 0 的数,使用 ~(~0 << 4) 进行计算,其中 ~0 的结果是全部位为 1 的数,~0 << 4 的结果是低 4 位为 0,其余位为 1 的数,再对其进行取反操作得到低 4 位全为 1,其余位全为 0 的数,结果赋值给变量 c。
最后,将变量 b 和 c 进行按位与运算,并将结果赋值给变量 d。这样,变量 d 就存储了取 a 从右端开始的 4~7 位的结果。
最后,使用 printf 函数分别输出变量 a 和 d 的八进制表示。
通过该例子,我们可以了解如何使用位运算来取一个整数的特定位段,并了解了右移运算符 >> 和按位与运算符 & 的基本用法。