解题思路:
这个是我看的别人的,但是别人没有具体说说是怎样的,我来说说吧
在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的二进制:
1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 |
右移四位之后:
1 | 0 | 0 | 0 | 1 | 1 |
然后与1111(15)按位与:
1 | 0 | 0 | 0 | 1 | 1 |
& | & | & | & | ||
1 | 1 | 1 | 1 | ||
0 | 0 | 1 | 1 |
0011的十进就是3.
不懂得留言,言语组织不足,望见谅, 谢谢……
注意事项:
参考代码:
#include <stdio.h> int main() { int n; scanf("%d", &n); printf("%d\n", (n >> 4) & 15); return 0; }
0.0分
28 人评分
题目不是说 取二进制取从右端开始的第4至7位 ,比如说567,二进制数为 1000110111,那么从右端开始的第4至7位为 0110 才对呀,为什么是 0011呢
好歹把能通过的放上来,就这还是推荐题解
cin cout 和你的头文件和c语言有关系吗
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:600 |
数组输出 (C语言代码)浏览:811 |
剔除相关数 (C语言代码)浏览:1058 |
C语言训练-求函数值 (C语言代码)浏览:599 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:573 |
【金明的预算方案】 (C++代码)浏览:996 |
哥德巴赫曾猜测 (C语言代码)浏览:2560 |
C二级辅导-计负均正 (C语言代码)浏览:523 |
众数问题 (C语言代码)浏览:717 |
数列有序 (C语言代码)浏览:974 |
靠窗 2024-06-17 17:38:43 |
15的二进制是0b00001111按位与的结果只能保留后四位刚好就是题目要求的第四到第七位