LeetCode : 231. Power of Two

题目很简单,但实现上有个新的有趣的东西:

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()
返回对应的字符串.
posted @ 2016-05-06 16:54  盛小胖  阅读(172)  评论(0编辑  收藏  举报