Как инициализировать набор битов типа все биты в 1

Я знаю функцию set () для уже созданного объекта bitset, но мне нужен составной bitset, все биты которого равны 1. Ситуация является параметром функции по умолчанию.
например:

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

что X должно быть, -1 может работать для первых 64 бит, но не для всех.

5

Решение

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

Или объединить в 1 утверждение:

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

В C ++ 11:

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

Производительность operator ~, flip() а также set():

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

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

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

Выход:

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

Удивительно set() намного быстрее чем operator ~ а также flip

9

Другие решения

Ты можешь использовать std::bitset<100> = std::bitset<100>(std::string(100, '1')) но это немного уродливо имо

6

По вопросам рекламы [email protected]