游客 Signup | Login
中文 | En

1281 - C语言12.3

编写一个函数getbits,从一个32位的整数中取出某几位,即取出的这些位保留原值,其余位为0。取出的位数定义为从右边数的第n1位到第n2位,请注意最右边的位是第0位。函数的调用形式为getbits(value, n1, n2)。给定value、n1和n2,输出getbits的返回值的10进制表示。

请务必注意本题中的整数是32位无符号整数,输入和输出时可以使用%u进行处理。

Input

3个用空格隔开的整数value、n1和n2。其中value是正整数,n1和n2为非负整数。保证n1不大于n2,且均不大于30。

Output

getbits(value, n1, n2)的返回值的10进制表示。

请注意行尾输出换行。

Examples

Input

1023 5 15

Output

992

Solution C

#include <stdio.h>
int main(){
	int i,n1,n2,tmp,n;
	unsigned int v;
//	freopen("1.txt","r",stdin);
	while (scanf("%u %d %d",&v,&n1,&n2)==3)
	{
		tmp=0;
		n=1;
		for (i=n1;i<=n2;i++)
		{
			tmp|=n<<i;
		}
		printf("%u\n",v&tmp);
	}
//	fclose(stdin);
	return 0;
}

Solution C++

#include <stdio.h>
int main() {
	unsigned int getbits(unsigned int, int, int);
	unsigned int a;
	int n1, n2;
	scanf("%u %d %d", &a, &n1, &n2);
	printf("%u\n", getbits(a, n1, n2));
	return 0;
}
unsigned int getbits(unsigned int a, int n1, int n2) {
	return (a & (((1 << n2) - 1) ^ ((1 << n1) - 1)));
}

Time Limit 1 second
Memory Limit 32 MB
Discuss Stats
上一题 下一题