解题思路:参考第一个优质题解,不理解的还可以看第一个题解
因为题目为了取二进制数从右端开始的第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语言程序设计教程(第三版)课后习题12.5 (C语言代码)浏览:875 |
兰顿蚂蚁 (C++代码)浏览:1160 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:760 |
C语言程序设计教程(第三版)课后习题8.8 (C语言代码)浏览:895 |
用筛法求之N内的素数。 (C++代码)浏览:754 |
回文数字 (C语言代码)浏览:2539 |
C语言程序设计教程(第三版)课后习题10.1 (C语言代码)浏览:571 |
剪刀石头布 (C语言代码)浏览:1519 |
班级人数 (C语言代码)浏览:980 |
分解质因数 (C++代码)浏览:1561 |