读书人

这个算法没看懂~该怎么处理

发布时间: 2012-08-13 13:21:53 作者: rapoo

这个算法没看懂~
对一个16位的二进制取出它的奇数位(即从左边起第1、3、5……、15位)。

算法的部分没看懂,帮忙解释下~

C/C++ code
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;}



[解决办法]
((value >> (16 - i))<<15)>>15

value >> (16 - i) 要取的奇数位移动到数的最后一位 去掉此位之后的数
再左移15位 将要取的奇数位 移动到数的第一位 就是去掉此位之前的数
再右移15位 就是你要的奇数位了


z = z + a * q;
将奇数位算上他的权值相加 就是结果了吧……

[解决办法]
一个一个的试数,当I=1时,q的值为十进制128,二进制10000000,当I=3时,q的值为十进制64,二进制1000000,以此类推,看看就明白了!

读书人网 >C语言

热点推荐