解题思路:参考第一个优质题解,不理解的还可以看第一个题解
因为题目为了取二进制数从右端开始的第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分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复