C语言练习题-C语言练习题实例54
![](https://wx.javatiku.cn/j/j301-t.jpg)
题目:取一个整数 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
的八进制表示。
通过该例子,我们可以了解如何使用位运算来取一个整数的特定位段,并了解了右移运算符 >>
和按位与运算符 &
的基本用法。