判断x是否为2的若干次幂

判断x是否为2的若干次幂

关键运算 i & (i - 1)

i 和 i-1的二进制区别,i若为2的若干次幂,则i与i-1的区别为相反

----------------

1
0000000000000001
0000000000000000
0000000000000000
1
----------------
2
0000000000000010
0000000000000001
0000000000000000
1
----------------
4
0000000000000100
0000000000000011
0000000000000000
1
----------------
8
0000000000001000
0000000000000111
0000000000000000
1
----------------
16
0000000000010000
0000000000001111
0000000000000000
1
----------------
32
0000000000100000
0000000000011111
0000000000000000
1
----------------
64
0000000001000000
0000000000111111
0000000000000000
1
----------------
128
0000000010000000
0000000001111111
0000000000000000
1

测试代码:

#include <iostream>
#include <bitset>
int main()
{
        for (int i = 1; i<=1024; i = 2*i)
	{
		cout<<"----------------"<<endl;
		cout<<i <<endl;
		cout<<bitset<16>(i)<<endl;//二进制输出i
		cout<<bitset<16>(i-1)<<endl;//二进制输入i-1
		cout<<bitset<16>(i & (i - 1))<<endl;
		cout<<((i & (i - 1))?0:1)<<endl;//判断是否为2的若干次幂
	}
	system("pause");
	return 0;
}


posted @ 2012-03-24 11:58  foreverlearn  阅读(607)  评论(0编辑  收藏  举报