解题思路:参考第一个优质题解,不理解的还可以看第一个题解

因为题目为了取二进制数从右端开始的第4至7位,所以我们只需要找一个二进制数与n的二进制数的4-7位进行&运算(都是1则为1,有0则为0)。

所以我们取11110000,十进制为240(从右第一个0为第0位,第二个0为第一位~~~~最后一个1为第七位),当然也可以11111111,十进制为247。

因为我们只需要从右4-7位,所以只要保证4-7位进行&运算过后还是原来的,没有改变即可,其它位置可以不管。

所以只需将我们输入的n与240进行&运算,或者n与247进行&运算,就可以得到从右4-7位的二进制表达,最后结果需要4-7位这一部分二进制的十进制,

不需要0-3位二进制,所以只需要将4-7位向右移动4位,就可以得到结果。


可能说的有点啰嗦。举一下题目给的例子吧:

输入n=217,二进制为11011001,从右4-7位的1101如何取到?就是通过&运算,11011001&11110000=11010000(4-7位未变,其它位置不管),这时后面多了0-3位的四个0,我们不需要,将其去掉,可以通过移位,右移四个位置 >>4(或者除2的4次方,因为移位的本质就是乘或除2的次方),得到1101,最终为13。


注意事项:

主要就是知道左移位<<,右移位>>,&运算是在二进制情况下进行的


参考代码:

#include <stdio.h>

void main()

{

    int n;

    scanf("%d", &n);

    printf("%d", (n & 240) >> 4); //或 printf("%d", (n & 247) /16 );

   // system("pause");

}


点赞(0)
 

0.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论