关于C语言的问题,大神们,帮个忙谢谢谢谢谢谢

编写一个函数getbits,从一个16位的单元中取出某几位(即该几位保留原值,其余位为0)。函数调用形式为:getbits(value,n1,n2)valuen为该16位... 编写一个函数getbits, 从一个 16位的单元中取出某几位(即该几位保留原值,其余位为 0)。函数调用形式为:
getbits(value, n1, n2)
valuen 为该 16位 (两个字节)单元中的数据值,n1 为欲取出的起始位,n2 为欲取出的结束位。如:
getbits(0101675,5,8)表示对八进制101675 这个数,取出它从左面起的第 5 位到第 8 位。
展开
 我来答
White_MouseYBZ
2018-07-04 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6489万
展开全部
#include "stdio.h"
int getbits(char *value,int n1,int n2){
unsigned short t,v;
if(value[0]=='0' && (value[1]|0x20)=='x')
t=16;
else if(value[0]=='0' && value[1]>='1' && value[1]<='9')
t=8;
else if(value[0]=='1' && value[1]<='9')
t=10;
else{
printf("Input error, exit...\n");
return 0;
}
for(v=0;*value;(v*=t)+=*value++-'0');
printf("\n");
for(t=0x8000>>n1;n1<=n2;n1++,t>>=1)
printf("%d",!!(v&t));
return 1;
}
int main(int argc,char *argv[]){
int n1,n2;
char value[10];
printf("Please enter value, n1 & n2(short 0<=n1<=n2<16)...\n");
if(scanf("%9s%d%d",value,&n1,&n2)!=3 || n1<0 || n2>15 || n2<n1 || !getbits(value,n1,n2)){
printf("Input error, exit...\n");
return 0;
}
printf("\n");
return 0;
}

运行样例:

听不清啊
高粉答主

2018-07-04 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部
#include <stdio.h>
unsigned short getbits(unsigned short value,unsigned short n1,unsigned short n2)
{n1=16-n1; n2=16-n2;    //从左数起转换为从右数起
 return (value>>n2)&((1<<n1)-1);   //先去掉右边的n2位,再与n1个1进行&
}
int main() 
{unsigned short x,n1,n2;
 scanf("%hd%hd%hd",&x,&n1,&n2);
 printf("%hd\n",getbits(x,n1,n2));
 return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友b3c242e
2018-07-04 · TA获得超过438个赞
知道小有建树答主
回答量:515
采纳率:70%
帮助的人:386万
展开全部
unsigned short getbits(unsigned short value,int n1,int n2)
{
unsigned short temp=0;
int i;
for(i=n1;i<=n2;i++)
temp|=(value&(1<<(16-i)));
return temp
}
不理解的追问
望采纳 谢谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式