左嘉


私信TA

用户名:zuojia

访问量:73041

签 名:

Jz

等  级
排  名 4
经  验 31543
参赛次数 226
文章发表 72
年  龄 36
在职情况 在职
学  校 北京理工大学
专  业

  自我简介:

解题思路:
为了原整数value用二进制表示后,从右数第n1位到第n2位不变,其余位变0,如n1=5,n2=9,可以得到如下图所示的一个二进制数(第三行),用它和value与,就可以取得所要的数。1774.png

注意事项:
为了使得0右移不会由于系统不同,得到-0算术右移高位补1的结果,这里定义无符号整型x=0,再对x取非保证高位补0。
参考代码:

#include<stdio.h>
int main(){
	unsigned getbits(unsigned,unsigned,unsigned);
	unsigned value,n1,n2;
	scanf("%u%u%u",&value,&n1,&n2);
	printf("%u\n",getbits(value,n1,n2));
	return 0;
}
unsigned getbits(unsigned v,unsigned a,unsigned b){
	unsigned x=0;
	return v&(~x<<a)&(~x>>31-b);//二进制左移低位补0,二进制右移高位补0
}


 

0.0分

5 人评分

  评论区

为什么出不来
2022-02-22 10:50:56 | |
  • «
  • 1
  • »