请教一个小问题:
怎么判断一个数是不是2的幂次方?
如果不是,怎么求得最近的一个2的幂次方?用于快速傅立叶变换,它要求数组数据个数为2的幂次方,如果不是则需要在后面以0补齐。

解决方案 »

  1.   

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

  2.   

    如果不是,怎么求得最近的一个2的幂次方?
    ---------------------------------
    最简单的方法,将这个数最高位置1,后面的全部置0
      
    good ideal!
      

  3.   

    傅式变换,都忘的差不多了...&以前听过种方法LZ参考下,将该数二进制形式移位,遇到1将其置0,若结果为0,则为二的某次幂..二的某次幂应该只有一个1
      

  4.   

    如果不是,怎么求得最近的一个2的幂次方?
    ---------------------------------
    最简单的方法,将这个数最高位置1,后面的全部置0
      
    good ideal!
    怎么知道它有多少位?谢谢
      

  5.   

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

  6.   

    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;
    }
      

  7.   

    以上以8bit数为例,计算是几位数。
      

  8.   

    呵呵由于本人菜鸟,时间又比较急,没办法,采用了下面的笨方法:各位有什么好方法教教小弟!
    if(!(iNum&(iNum-1)))
    {
    ....
    }
    else
    {
    dBuf=iNum;
    iBuf=0;
    do
    {
    dBuf=dBuf/2.0;
    iBuf++;
    }while(dBuf>1.0);
    N=(int)pow(2,iBuf);

    for(loop=iNum;loop<=N-1;loop++)
    data[loop]=0.0;
    }