解题思路:
    在我们取出的一段区间,我们建立一个值,为其在这个区间赋值为1,接着我们将这个新的值与原来的值进行按位与操作


对于案例,我们可以这么表示

value =1023 ,n1=5 , n2=15

00000000 00000000 00000001 11111111        原数据 1023

00000000 00000000 00111111 11100000        建立新数据为5~15这一个区间全部为1的数

进行按位‘与’操作

00000000 00000000 00000001 11100000       答案数据


参考代码:

【代码来说为了理解写的相对简单,如果你对二进制的掌握已经很好了,可以看一下本题目的优质题解,采用高度压缩的方法进行此操作,比本方法利用循环更加快速】

#include<bits/stdc++.h>
#define hh ios::sync_with_stdio(false),cin.tie(0),cout.tie(0) 
using namespace std;
unsigned int getbits(int v,int n1,int n2){
 unsigned int k=0;
 while(n1<=n2){ 
  unsigned temp=1<<(n1++);
  k+=temp; 
 }
 return (k&v); 
}
int main(){
 hh;
 unsigned int value,n,m;
 while(cin>>value>>n>>m){
  cout<<getbits(value,n,m)<<endl;
 }
 return 0;
}


点赞(1)
 

0.0分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 1 条评论

竟惹寂寥 4年前 回复TA
牛皮牛皮