首先bitset<10>bit(6); 就可以直接把6转化成了相应的二进制了. 但是如果要输出. 必须先强制转化成int才能输出. 下标从0开始. 然后就是bitset之间的操作只能用bitset来判断, 比如说判断是否等于0. 那么应该先定义bitset<10>bit(0); 然后判 (注意优先级)(bitset[5] & bitset[28] )== bit ? 不能直接写 == 0 . !!!
bitset<10>bit(6): (直接用cout << bit << endl输出为): 0000000110
(或者bitset<10>bit = n || bitset<10>bit(n)).
bitset中一些比较有用的操作:
bit.any() //bit中是否存在为1的二进制位? (存在就是1)
bit.count() //bit中二进制位为1的个数
bit.set() //把bit中所有的二进位置为1
bit.reset() //把bit中所有的二进位置为0
例题: POJ - 2443
//题意: 给你很多集合. 问两个数是否存在在同一个集合.
//思路: 每一个数用一个bitset来存. 在的集合序号对应的二进制出令成1. 那么判断是否存在再相同集合, 直接对应的bitset 与 一下就行, 如果等于0就不在, 否则就在.
AC Code
const int maxn = 1e4+5;
void solve()
{
int n;
scanf("%d",&n);
bitset<1005> bit[maxn];
for(int i=1;i<=n;i++){
int k; scanf("%d",&k);
while(k--){
int u; scanf("%d",&u);
bit[u][i] = 1;
}
}
int q;
scanf("%d",&q);
while(q--){
int u,v;
scanf("%d%d",&u,&v);
bitset<1005> tmp(0);
if((bit[u] & bit[v]) == tmp){
printf("No\n");
}
else
printf("Yes\n");
}
}