解题思路:

这个是我看的别人的,但是别人没有具体说说是怎样的,我来说说吧

在C和C++中有很多关于位的操作符:(这里就说说本次用到的,其他的自己看看博客,或者看看书推荐C prime plus)

        (首先明确位操作符都是在二进制的基础上来操作的)

                >>:右移运算符

                        比如:5>>1就是101右移1位(从右向左看把每一位上的数字分别向右移动1位,移动之后超出两边界限就舍去不要)结果位10。5>>2结果为1.

                <<:左移运算符

                        比如:5<<1就是101左移1位(从左向右看把每一位上的数字分别向左移动1位,移动之后超出左边的直接补位就好吗,右边补0)结果位1010。5<<2结果为10100.

                &:按位与运算符

                        101&110=100(对应位置上1&1=1  1&0=0  0&0=0对应每一位的结果)

                        1   0    1                                            

                        1   1    0   

                        1   0    0


那么对于这道题:题目中说把10进制数转成2进制从右向左取第4到第7之间的数然后转换成10进制输出(注意这里从0开始数,包括4和7边界),那么我们可以利用移位运算符右移四位之后再取后4为即可:

                比如;217的二进制是11011001右4位之后就是1101,然后和1111(十进制的15)按位与得到最后面的四位二进制即可;

                在举一个吧(上面刚好剩了4位):567的二进制是1000110111右移4位之后100011然后与1111按位与得到最后的4位,即为所求;(用表格表示一下)

567的二进制:

1000110111

右移四位之后:





100011

然后与1111(15)按位与:


100011


&&&&


1111


0011


0011的十进就是3.


                        不懂得留言,言语组织不足,望见谅, 谢谢……

注意事项:

参考代码:

#include <stdio.h>

int main()
{
	int n;
	scanf("%d", &n);
	printf("%d\n", (n >> 4) & 15);
	return 0;
}


点赞(25)
 

0.0分

27 人评分

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

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

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

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

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

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

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

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

评论列表 共有 18 条评论

靠窗 7月前 回复TA
@Kcoren 15的二进制是0b00001111按位与的结果只能保留后四位刚好就是题目要求的第四到第七位
江郎的白日梦 1年前 回复TA
@一个人的巴黎 是从0开始数的
xym 2年前 回复TA
@一个人的巴黎 因为题目说是第4位其实是第5位
Kcoren 2年前 回复TA
大佬我想问问,这里为啥要和15按位与呢
一个人的巴黎 2年前 回复TA
题目不是说 取二进制取从右端开始的第4至7位 ,比如说567,二进制数为 1000110111,那么从右端开始的第4至7位为 0110 才对呀,为什么是 0011呢
Jerry 3年前 回复TA
@Jerry 我觉得你肯定是修改文章代码了,我不会看错的
Jerry 3年前 回复TA
@Jerry Sorry,评论错地方了,删不掉了
咖啡 3年前 回复TA
@Jerry 看不懂不怪你哦~分不清C和C++哪一个编译也不怪你哦~好好刷题哦~
Jerry 3年前 回复TA
好歹把能通过的放上来,就这还是推荐题解
竟惹寂寥 4年前 回复TA
牛批