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))); }