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

原创 2012年03月24日 11:58:35

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


版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

快速判断一个数是否是2的幂次方,若是,并判断出来是多少次方!

将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0; 因此问题可以转化为判断1后面是否跟了n个0就可以了。         如果将这个数减去1后会发现,...

快速判断一个数是否是2的幂次方,若是,并判断出来是多少次方!

转自:http://blog.csdn.net/hackbuteer1/article/details/6681157   将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

快速判断一个数是否是2的幂次方,若是,并判断出来是多少次方!

将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0; 因此问题可以转化为判断1后面是否跟了n个0就可以了。         如果将这个数减去1后会发...

高效判断一个数是否是2的幂次方

一个数是否是2的幂次方,比较常用的是递归和移位运算进行判断。递归算法的思想很简单,就是不断的模上2去判断。 如果一个数是2的幂,那么它的二进制表示中就只有一位1,例如:10000,1000,100等...
  • gaolu
  • gaolu
  • 2013-12-20 13:19
  • 936

快速判断一个数是否是4的幂次方,若是,并判断出来是多少次方! .

将4的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1(1在奇数位置),并且1后面跟了偶数个0; 因此问题可以转化为判断1后面是否跟了偶数个0就可以了。        4的整数次...

快速判断一个数是否是2的幂次方c++

将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0; 因此问题可以转化为判断1后面是否跟了n个0就可以了。         如果将这个数减去1后会发...

快速判断一个数是否是2的幂次方,并判断出来是多少次方

将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0; 因此问题可以转化为判断1后面是否跟了n个0就可以了。 如果将这个数减去1后会发现,仅有的那个1会变...

判断数组里面的若干个数的和是否为给定的数

给出一个整型数组num[],和一特定值x,判断数组中是否存在一个或若干个元素之和为x,若存在则返回true,否则false。 分析:该题用递归解决时,代码实现相当简单。但其时间复杂度为O(2^n),...

2.判断是否为回文串

回文串判断解法一:两头往中间扫描(时间复杂度为O(n),空间复杂度为O(1)) @Test public void Demo3(){ char str[]={'A','B...

判断一个数是否为2的n次方

参考书籍:算法设计与分析基础  Java程序员面试宝典-何昊等 package com.Howard.test11; /** * 判断一个数是否为2的n次方 * @author Howar...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)