题目很简单,但实现上有个新的有趣的东西:
class Solution { public: bool isPowerOfTwo(int n) { bitset<64> b(n); return b.count()==1; } };
std::bitset是STL的一部分,std::bitset是一个模板类,有了它我们可以像使用数组一样使用位。
#include<bitset>
std::bitset<8> bs;
bs[0]=1;
bs[3]=true;
bs[7]=0;
bitset被设计为开放的,也就是说一个bitset对象可以转换为其它类型的值,典型的,我们想把一个整数设置成具有特定的位模式,我们可以简单地把一个bitset转换为一个整数:
unsigned long value=bs.to_ulong();
std::bitset<32> bs32(value);
bs32[15]=1;
value=bs32.to_ulong();
此外bitset还可以也字符串互换,这样我们就可以更直观对bitset进行操作了,我只是简单地把我们想要的”01“字符串就可以了:
std::bitset<32> bs("011010101001");
std::string str=bs.to_string();
// 流
os << b
把b中的位集输出到os流
os >>b
输入到b中,如"cin>>b",如果输入的不是0或1的字符,只取该字符前面的二进制位.
// 属性方法
bool any()
是否存在置为1的二进制位?和none()相反
bool none()
是否不存在置为1的二进制位,即全部为0?和any()相反.
size_t count()
二进制位为1的个数.
size_t size()
二进制位的个数
flip()
把所有二进制位逐位取反
flip(size_t pos)
把在pos处的二进制位取反
bool operator[](size_type _Pos)
获取在pos处的二进制位
set()
把所有二进制位都置为1
set(pos)
把在pos处的二进制位置为1
reset()
把所有二进制位都置为0
reset(pos)
把在pos处的二进制位置为0
test(size_t pos)
在pos处的二进制位是否为1?
unsigned long to_ulong()
用同样的二进制位返回一个unsigned long值
string to_string()
返回对应的字符串.