那谁的技术博客

感兴趣领域:高性能服务器编程,存储,算法,Linux内核
随笔 - 210, 文章 - 0, 评论 - 1183, 引用 - 0
数据加载中……

[算法问题]判断一个数是不是2的幂?

位操作的运用:

bool Is2Power(int nNum)
{
    
return nNum > 0 ? ((nNum & (~nNum + 1)) == nNum ? true : false) : false;
}

posted on 2006-07-10 23:25 那谁 阅读(6003) 评论(17)  编辑 收藏 引用 所属分类: 算法与数据结构

评论

# re: [算法问题]判断一个数是不是2的幂?  回复  更多评论   

强.
2006-07-11 09:20 | 橙子

# re: [算法问题]判断一个数是不是2的幂?  回复  更多评论   

将((nNum & (~nNum + 1)) == nNum换成!(nNum & (nNum - 1))也许会更好一点
2006-07-11 09:48 | 3×7=51

# re: [算法问题]判断一个数是不是2的幂?  回复  更多评论   

过于极至的东西...我完全看不明白
2006-07-11 19:30 | LOGOS

# re: [算法问题]判断一个数是不是2的幂?  回复  更多评论   

这个东西,网络上已经存在多时了。
2006-07-12 09:27 | 沐枫

# re: [算法问题]判断一个数是不是2的幂?  回复  更多评论   

3×7=51
2006-07-12 16:29 | Ying-Shen

# re: [算法问题]判断一个数是不是2的幂?  回复  更多评论   

@3×7=51
为什么呢?
2006-07-12 16:30 | Ying-Shen

# re: [算法问题]判断一个数是不是2的幂?  回复  更多评论   

@Ying-Shen
你将nNum和nNum - 1用2进制打印出来看看就知道为什么了,如果一个数不行的话多试几个数。
2006-07-12 16:36 | 3×7=51

# re: [算法问题]判断一个数是不是2的幂?  回复  更多评论   

好文,收进我的标程库了
2006-07-17 15:44 | 我爱ACM

# re: [算法问题]判断一个数是不是2的幂?  回复  更多评论   

是二的幂的数二进制表现方式:
2^1 = 2 10
2^2 = 4 100
2^3 = 8 1000
.......
2006-07-30 21:16 | waterflier

# re: [算法问题]判断一个数是不是2的幂?  回复  更多评论   

return n&(n-1) == 0;
2006-09-23 00:26 | phus

# re: [算法问题]判断一个数是不是2的幂?  回复  更多评论   

return n &&(n&(n-1))

比较好 可以测出0 这种特殊情况
2007-10-31 14:59 | 西山老土匪

# re: [算法问题]判断一个数是不是2的幂?  回复  更多评论   

我有一个比较简单的方法:可以用一行表达式来表示:
#define Pow2(x) x&(x-1)?true:false
具体实现可以通过一个程序来写:
#include "stdafx.h"
#include"stdio.h"
#define TRUE 1
#define FALSE 0
#define POW2(X) (X)&(X-1)?(TRUE):(FALSE)
void main()
{
int i;
printf("请输入一个整数\n");
scanf("%d",&i);
if(POW2(i))
printf("false\n");
else
printf("true\n");
}
2008-11-02 10:42 | pxxxb

# re: [算法问题]判断一个数是不是2的幂?  回复  更多评论   

nNum^(nNum-1)?false:true;
2008-12-05 12:04 | cinzy

# re: [算法问题]判断一个数是不是2的幂?[未登录]  回复  更多评论   

-2^n 不是 2 的幂。所以很多回复如
return n&(n - 1)
或者
return n && (n&(n - 1))
的前提是要把 n 声明为无符号整数。
2010-03-27 07:32 | hzpfly

# re: [算法问题]判断一个数是不是2的幂?[未登录]  回复  更多评论   

return n&(n - 1) and
return n&&(n&(n - 1)) are all wrong!
Example:
n = 110, n-1 = 101, we have n&(n-1) = 100.
So n&(n-1) is not zero, the return value is true.
We all know 110 is not 2^n.
2010-03-27 09:08 | hzpfly

# re: [算法问题]判断一个数是不是2的幂?  回复  更多评论   

楼上思路不清
2010-06-21 14:34 | hzpfly

# re: [算法问题]判断一个数是不是2的幂?  回复  更多评论   

@hzpfly
牛逼啊,n=110,n-1=101???
2013-02-17 10:52 | lanmanck

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理