解题思路:
注意事项:
v&(~x<<a)&(~x>>31-b);//二进制左移低位补0,二进制右移高位补0
其实这里就相当于下面,这就是取反符号的作用
value >>= n1;//先右移去掉n1右边多余的数
value <<= n1;//再左移回到原位置,并将n1右边多余的数的都补为0
参考代码:
#include<stdio.h>
unsigned getbits(unsigned v,unsigned a,unsigned b)
{
unsigned x=0;
return v&(~x<<a)&(~x>>31-b);//二进制左移低位补0,二进制右移高位补0
}
int main()
{
unsigned value,n1,n2;
scanf("%u %u %u",&value,&n1,&n2);
printf("%u\n",getbits(value,n1,n2));
return 0;
}
0.0分
0 人评分
2006年春浙江省计算机等级考试二级C 编程题(2) (C++代码)直接打表啊8以上值不变hhh浏览:664 |
分糖果 (C++代码)浏览:933 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:981 |
C语言训练-求1+2!+3!+...+N!的和 (C语言代码)浏览:575 |
人见人爱A+B (C语言代码)浏览:664 |
Pascal三角 (C语言代码)浏览:1252 |
1908题解浏览:680 |
关于C语言变量位置的问题浏览:294 |
罗列完美数 (C语言代码)浏览:519 |
单词个数统计 (C语言代码)浏览:1046 |