如何将bitset类型的所有位初始化为1

时间:2013-08-29 14:08:47

标签: c++ std-bitset

我知道已经构造的bitset对象的set()函数,但我需要一个构造的bitset,所有位都是1.这种情况是一个默认的函数参数。 例如:

void bar(std::bitset<100> flags = X) {
}

X应该是什么,-1可能适用于前64位,但不是全部。

2 个答案:

答案 0 :(得分:11)

std::bitset<100> bs;
bs.set();

或者合并成1个声明:

std::bitset<100> bs  = std::bitset<100>().set();

在C ++ 11中:

auto bs = std::bitset<100>{}.set();

修改:或者更好地使用std::move来避免复制,因为set会返回左值参考bitset&

auto bs = std::move(std::bitset<100>{}.set());

operator ~flip()set()的效果:

std::bitset<100> bs;
clock_t t;
t = clock();
for(int i = 0; i < 1000000; i++) {
    bs = std::bitset<100>().set();
}
t = clock() - t;
std::cout << "Using set() cost: " << t << " clicks." << std::endl;

t = clock();
for(int i = 0; i < 1000000; i++) {
    bs = ~std::bitset<100>();
}
t = clock() - t;
std::cout << "Using ~ cost: " << t << " clicks." << std::endl;

t = clock();
for(int i = 0; i < 1000000; i++) {
    bs = std::bitset<100>().flip();
}
t = clock() - t;
std::cout << "Using flip cost: " << t << " clicks." << std::endl;

输出:

Using set() cost: 59 clicks.
Using ~ cost: 104 clicks.
Using flip cost: 75 clicks.

令人惊讶set()operator ~flip

快得多

答案 1 :(得分:6)

你可以使用std::bitset<100> = std::bitset<100>(std::string(100, '1')),但这有点难看imo