读书人

请问一个小疑点

发布时间: 2012-01-13 22:43:29 作者: rapoo

请教一个小问题
请教一个小问题:
怎么判断一个数是不是2的幂次方?
如果不是,怎么求得最近的一个2的幂次方?

用于快速傅立叶变换,它要求数组数据个数为2的幂次方,如果不是则需要在后面以0补齐。

[解决办法]
移位
[解决办法]
傅式变换,都忘的差不多了...

&以前听过种方法LZ参考下,将该数二进制形式移位,遇到1将其置0,若结果为0,则为二的某次幂..


[解决办法]
怎么判断一个数是不是2的幂次方?
--------------------
判断这个数最高位是否为1,为1则继续判断后面的位是否全为0,是则为2的幂次方。其余情况都不是

如果不是,怎么求得最近的一个2的幂次方?
---------------------------------
最简单的方法,将这个数最高位置1,后面的全部置0
[解决办法]
上面说的最高位是从左到右第一个为1的位
[解决办法]
如果不是,怎么求得最近的一个2的幂次方?
---------------------------------

最简单的方法,将这个数最高位置1,后面的全部置0

原数127=01111111
64=01000000
128=10000000
................

俺想,还是比较下吧,随便想个,有啥漏洞各位指教...
1.最高位1置1,其他置0,
2.最高位1下一位置1,其余置0
3.最高位1上一位置1,其余置0
123和原数比较,找最小的.
[解决办法]
&以前听过种方法LZ参考下,将该数二进制形式移位,遇到1将其置0,若结果为0,则为二的某次幂..

最后得到循环的次数不就是位数..
[解决办法]
UCHAR ucExample = XXXX;
UCHAR i = 0;
UCHAR ucMask = 0x80; //10000000
for(i = 7; i != 0; i--)
{
if(0x01 == ((ucExample & ucMask) > > i))
{
bitcnt = i + 1;
break;
}
ucMask > > 1;
}
[解决办法]
以上以8bit数为例,计算是几位数。

读书人网 >VC/MFC

热点推荐