一道c语言例题,麻烦哪位高手讲解一下!谢谢

写一个函数,对一个16位的二进制数取出它的奇数位(即从左边起的1、3、5...15位)函数是这样的:unsignedshortgetbits(unsignedshortv... 写一个函数,对一个16位的二进制数取出它的奇数位(即从左边起的1、3、5...15位)
函数是这样的:
unsigned short getbits(unsigned short value)
{int i,j;
unsigned short int z,a,q;
z=0;
for(i=1;k=15;i+=2)
{q=1;
for(j=1;i<=(16-i-1)/2;j++)
q=q*2;
a=value>>(16-i);
a=a<<15;
a=a>>15;
z=z+a*q;
}
return(z);
}
它的运算流程是怎么样的,不是很能理解,麻烦哪位给讲解一下!谢谢
错了for(i=1;k=15;i+=2)
不好意思是:for(i=1;i<=15;i+=2)
展开
 我来答
直觉飞翔
2006-07-20 · TA获得超过790个赞
知道小有建树答主
回答量:287
采纳率:0%
帮助的人:348万
展开全部
unsigned short getbits(unsigned short value)
{int i,j;
unsigned short int z,a,q;
z=0;
for(i=1;i<=15;i+=2) //得到需要的每个奇数
{q=1;
for(j=1;j<=(16-i-1)/2;j++)
q=q*2;
a=value>>(16-i);
a=a<<15;
a=a>>15;
z=z+a*q;
}
return(z);
}
程序应该是这样的。
for(i=1;i<=15;i+=2) //得到需要的每个奇数

q=1;
for(j=1;j<=(16-i-1)/2;j++)
q=q*2;//得到需要的二进制位的位置
因为1=0001,2=0010,4=0100,8=1000,依次类推

a=value>>(16-i);
a=a<<15;
a=a>>15;
是把value里的第i位的数字保留,其余位置0

z=z+a*q;
每次循环把提出来的a按照q的位置写到z里面

return(z);返回z的值

一楼的程序得到的结果和这个结果不一样,因为q每次变化的位置是连续的。
如果输入1010101010101010,原程序得到的是11111111,而一楼的程序得到的是1010101010101010
忘至白葬不情必0T
2006-07-20 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:90%
帮助的人:1.2亿
展开全部
我也不理解,干嘛要写得这么烦,一句话不就行了。
unsigned short getbits(unsigned short value)
{
return value & 0xAAAA;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gudking
2006-07-20 · 超过10用户采纳过TA的回答
知道答主
回答量:64
采纳率:0%
帮助的人:38.5万
展开全部
for(i=1;k=15;i+=2) 好像是无限循环,不对哦。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式