本文主要是介绍编写一个函数getbits,从一个十六位的单元中取出某几位(即该几位保留原值,其余位为0)。函数调用形式为:getbits(value1,n1,n2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
原理如下:
对一个8进制数101675
二进制为 1 0 0 0 0 0 1 1 1 0 1 1 1 1 0 1
取出5~8位(从右往左取)
此时先将101675<<(右移)5位 左边补0
此时变为 0 0 0 0 0 1 0 0 0 0 0 1 1 1 0 1
想要取出5~8位 此时只需要& 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
想要得到这样一个0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1二进制数
只需要将~0(全为1)向左移动(n2-n1+1)即需要保留的位数 如5-8 8-5+1 保留4位
此时为 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
再对它按位取反 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
&上 0 0 0 0 0 1 0 0 0 0 0 1 1 1 0 1
#include <stdio.h>
int main()
{unsigned int getbits(unsigned value,int n1,int n2);unsigned int value;int n1,n2;printf("input an octal number:");scanf("%o",&value);//输入8进制数 printf("input n1,n2:");scanf("%d,%d",&n1,&n2);printf("result:%o\n",getbits(value,n1,n2));//8进制输出 return 0;
}unsigned int getbits(unsigned value,int n1,int n2)
{unsigned int z;z=(~(~0<<(n2-n1+1)))&(value>>(n1));return z;
}
结果为8进制的15
即 二进制 1101
这篇关于编写一个函数getbits,从一个十六位的单元中取出某几位(即该几位保留原值,其余位为0)。函数调用形式为:getbits(value1,n1,n2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!