判断一个十进制数是否为2的N次方

 

给定一个十进制数,是判断出这个数是否为2的N次方。对于满足2的N次方的数都有一个特点,比如:

2:  0000 00104:  0000 01008:  0000 100016: 0001 000032: 0010 0000......

     从中可以看出来一个整数是2的N次方的话,其对应的二进制数的最高位为1,其余位都为0。利用这个特点通过判断十进制数是否满足这个特点就能够判断出其是否为2的N次方。

     比如32为2^5,二进制数为 0010 0000 我们通过for() 循环通过移位操作,便可以判断出是否满足要求,但是这样做程序执行的效率是比较低的(相对而言)。

    通过分析我们可以得到一个比较高效的的算法,2的N次方数满足最高位为1其余低位为0,我们可以将其减一之后,原来为0的位全部变成1,最高位1变成0,比如:

     4-1=3;   4:0000 0100   3:0000 0011

  然后将结果与十进制数进行按位与运算,如果结果为0,则其为2的N次方数。

#include 
#include
bool JudgeNum(int N)
{if (N <= 0)//判错return false;else if (((N)&(N - 1)) == 0)return true;elsereturn false;	
}
int main(void)
{printf("%d", JudgeNum(1));getchar();return 0;
}

 

 

 

 

 

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部