草莓西瓜熊


私信TA

用户名:zb85190113

访问量:3384

签 名:

等  级
排  名 3461
经  验 1925
参赛次数 0
文章发表 12
年  龄 0
在职情况 学生
学  校 翻斗幼儿园
专  业

  自我简介:

TA的其他文章

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

因为题目为了取二进制数从右端开始的第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 人评分

  评论区

  • «
  • »