题目:取一个整数 a 从右端开始的 4~7 位。

程序分析:可以这样考虑:

  1. 先使 a 右移 4 位。
  2. 设置一个低 4 位全为 1,其余全为 0 的数,可用 ~(~0<<4)
  3. 将上面两者进行按位与 & 运算。

实例

#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

最后,将变量 bc 进行按位与运算,并将结果赋值给变量 d。这样,变量 d 就存储了取 a 从右端开始的 4~7 位的结果。

最后,使用 printf 函数分别输出变量 ad 的八进制表示。

通过该例子,我们可以了解如何使用位运算来取一个整数的特定位段,并了解了右移运算符 >> 和按位与运算符 & 的基本用法。

标签: c语言, c语言教程, c语言技术, c语言学习, c语言学习教程, c语言下载, c语言开发, c语言入门教程, c语言进阶教程, c语言高级教程, c语言面试题, c语言笔试题, c语言编程思想, c语言练习, c语言练习题