2的幂问题

来源:互联网 发布:win7 64位c语言编译器 编辑:程序博客网 时间:2024/06/06 02:50

#include <bitset>
#include <iostream>
using namespace std;

bool isFit(int);
bool isFit2(int);
bool isFit3(int);//移位与1位于,判断最后以为是否为1,然后再移出去,知道为0,注意a=a>>1;(写出a>>1则a的值不会变化!)
void main()
{
// bitset<8> bs(16);//使用低阶位来初始化bs,及用ef两个来初始化bs。
 // 亦可以用0x010100011这样形式来初始化bs;
// cout<<bs.count()<<endl;//所以为7
 
// cout<<bs.to_ulong();
 
 //使用两种方法来判别一个数是不是2的幂
 while (1)
 {
 int num;
 cin>>num;
// if (isFit(num))
// if (isFit2(num))
 if (isFit3(num))
  cout<<"yes"<<endl;
 else
  cout<<"no"<<endl;
}
}
bool isFit(int a)
{
 return ((a&(a-1))==0)?true:false;

/* int b=a&(a-1);
 if (b==0)
  return true;
 else return false;
 */

}
bool isFit2(int a)
{
 bitset<8*sizeof(a)>bs (a);
  
 return (bs.count()==1)?true:false;
}

bool isFit3(int a)
{
 int b=1;
 int sum=0;
 while (a)
 {
  sum+=(a&b);
  a=a>>1;
 }
 return sum==1?true:false;

}

原创粉丝点击