一道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) 展开
函数是这样的:
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) 展开
3个回答
展开全部
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
{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
展开全部
我也不理解,干嘛要写得这么烦,一句话不就行了。
unsigned short getbits(unsigned short value)
{
return value & 0xAAAA;
}
unsigned short getbits(unsigned short value)
{
return value & 0xAAAA;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
for(i=1;k=15;i+=2) 好像是无限循环,不对哦。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |