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


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

一语句实现x是否为2的若干次幂的判断

一语句实现x是否为2的若干次幂的判断 #define is2*n(x)  ((x & (x - 1))? 0 : 1) int main(void) {         int m =...
  • Tommy_wxie
  • Tommy_wxie
  • 2012年03月15日 10:17
  • 3939

写一个语句实现x是否为2的若干次幂的判断

算法:如果一个数x为2的整数倍,则x&(x-1)为false,否则其为真 cout
  • u010636314
  • u010636314
  • 2016年03月13日 21:18
  • 468

写一语句实现x是否为2的若干次幂的判断

return !(x&(x-1))
  • tandesir
  • tandesir
  • 2011年11月09日 10:21
  • 2757

C++ 一句话实现是否为2的若干次幂的判断

#include"stdafx.h" #include using namespace std; /** 一句话实现是否为2的若干次幂的判断 当m中只有一位为1时,才为若干次幂 若有两个集以上1,则(...
  • u011206291
  • u011206291
  • 2016年10月20日 20:25
  • 935

C# 判断一个数是否是2的n次幂

判断一个数是否是2的n次幂 private bool Get2Flag(int num) { if (num < 1) return false; retur...
  • liujunjie612
  • liujunjie612
  • 2017年02月07日 16:19
  • 600

java 如何判断一个数是否为2的整数次幂

当不考虑负数时,对于此题分析可知,当输入值小于1时,此数肯定不是2的整数次幂。 当输入值大于一时,我们可以发现一个规律。2的整数次幂用二进制表示为: 2d = 10b;  4d = 100b; 8...
  • m0_38044247
  • m0_38044247
  • 2017年05月03日 20:06
  • 839

如何机智的判断一个整数是否是2的n次方幂

编程之美-微软技术面试心得这本书中详细的讲了几种方法,有兴趣可以去看看。 我现在只写两种比较容易理解的方法。 第一种 2   10 4   100 8   1000 。。。。。 发现规律...
  • u010372981
  • u010372981
  • 2015年04月26日 08:55
  • 2707

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

x如果是2的若干次幂,那么它的二进制就只有一个1,转换成二进制就能看出来了···     return !(x&(x-1));  另外,求1的个数的一种简便方法: int func(int x) ...
  • qisefengzheng
  • qisefengzheng
  • 2015年01月26日 10:22
  • 344

判断一个数是不是2的整数次幂

一、一个数是2的整数次幂,那么这个数除2一定也是2的整数次幂 //方法一 //一个数是2的幂,那么n/2一定也是2的幂 bool checkPowerOf2_1(int n) { i...
  • u012730315
  • u012730315
  • 2015年05月28日 12:40
  • 1963

如何判断一个数是否为2的幂次方

最近在OJ上做题,遇到一道题,其中一个细节就是需要判断一个数是否为2的幂次方。初看似乎很简单,可我想来想去,竟然无甚好办法。最后我用一个笨办法解决了,那就是将2 4 8 16 32… …存到一个数组里...
  • RuiLees
  • RuiLees
  • 2017年04月05日 11:00
  • 595
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:判断x是否为2的若干次幂
举报原因:
原因补充:

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