编写一个函数getbits,从一个十六位的单元中取出某几位(即该几位保留原值,其余位为0)。函数调用形式为:getbits(value1,n1,n2)

编程入门 行业动态 更新时间:2024-10-12 01:25:51

编写一个函数getbits,从一个十六位的单元中取出某<a href=https://www.elefans.com/category/jswz/34/1769203.html style=几位(即该几位保留原值,其余位为0)。函数调用形式为:getbits(value1,n1,n2)"/>

编写一个函数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)

本文发布于:2024-03-23 18:38:35,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1741480.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:几位   六位   函数   原值   形式

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!