C语言位运算求解

来源:百度知道 编辑:UC知道 时间:2024/06/06 05:48:08
编写一个函数getbits,从一个16位的单元中取出某几位(即该几位保留原值,其余位为0)。函数调用形式为getbits(value,n1,n2)。
例如:getbits(0101675,5,8)表示在八进制101675中取出从第五位到第八位的数,其余位清零。

//取第n1到n2的位的值,第n1位的权比第n2的权高,
int getbits(short int value, int n1, int n2)
{
short int mask = 1;
int t;
if(n2<n1) // 如果n2比n1小,则交换
{
t=n2;
n2=n1;
n1=t;
}
int len = n2-n1; // 要取值多少位
for(int i=0;i<=len;i++)
{
mask <<= 1;//移动一位
mask |= 1; //把最后一位补0的值,改成值1
}
mask <<= 16 - n2;// 生成可以用来屏蔽不需要的位的数据
value &=mask; // 只保留需要的位
return value;
}
有什么不明白,找偶,再加点分吧,哈哈