咖啡


私信TA

用户名:Tianxn

访问量:57719

签 名:

十年OI一场空,不开LL见祖宗。

等  级
排  名 10
经  验 15579
参赛次数 2
文章发表 184
年  龄 22
在职情况 学生
学  校 西安航空学院
专  业 软件工程

  自我简介:

解题思路:

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

在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 <cstdio>
#include <cstdlib>
#include <iostream>
#include <cmath>
#include <cctype>
#include <cstring>
#include <string>
#include <stack> 
#include <algorithm>
#include <functional>
using namespace std;
int main()
{
	int n;
   	cin >> n;
   	n = (n>>4)&15;
   	cout << n;
	return 0;
}


 

0.0分

8 人评分

  评论区

牛批
2020-05-05 09:26:36 | |
这个移位满分
2020-03-02 22:57:51 | |
这个OJ平台不支持#Include<bits/stdc++>头文件,但也没必要写这么多头文件,其实也用不到,不过这个位运算没想到,向大佬递茶了
2019-11-23 18:27:10 | |
确定这是C语言描述吗?
2019-06-30 16:10:25 | |
cin
cout 和你的头文件和c语言有关系吗
2019-04-05 14:48:38 | |
你说的这些和代码有关系吗?你的头文件都过不了编译......然后你可以说一下下面代码里都是啥为什么要这样写吗
2019-04-05 14:09:32 | |
  • «
  • 1
  • »