深圳的私募基金公司:一道c语言例题,麻烦哪位高手讲解一下!谢谢

来源:百度文库 编辑:高校问答 时间:2024/04/30 03:05:15
写一个函数,对一个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;i<=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);
}
它的运算流程是怎么样的,不是很能理解,麻烦哪位给讲解一下!谢谢

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的值