C++ Как я могу назначить входное значение для аргумента std::bitset?

Я хочу сделать простую программу, которая будет принимать число бит от входа и в качестве вывода показывать двоичные числа, записанные на заданных битах (пример: я печатаю 3: это показывает 000, 001, 010, 011, 100, 101, 110 111). Единственная проблема, которую я получаю, - это вторая для-loop, когда я пытаюсь назначить переменную в bitset< bits>, но она хочет получить постоянное число. Если бы вы могли помочь мне найти решение, я был бы очень благодарен. Вот код:

#include <iostream>
#include <bitset>
#include <cmath>

using namespace std;

int main() {
    int maximum_value = 0,x_temp=10;
    //cin >> x_temp;
    int const bits = x_temp;

    for (int i = 1; i <= bits; i++) {
        maximum_value += pow(2, bits - i);
    }
    for (int i = maximum_value; i >= 0; i--)
        cout << bitset<bits>(maximum_value - i) << endl;
    return 0;
}

2 ответа

Числовой ("не тип", как его называет C++) параметр шаблона должен быть константой времени компиляции, поэтому вы не можете использовать предоставленный пользователем номер. Вместо этого используйте большое постоянное число (например, 64). Вам нужно другое целое число, которое ограничит ваш вывод:

int x_temp = 10;
cin >> x_temp;
int const bits = 64;
...

Здесь 64 - какое-то максимальное значение, которое вы можете использовать, потому что bitset имеет конструктор с unsigned long long аргумент, который имеет 64 бита (по крайней мере; может быть больше).

Однако, если вы используете int для промежуточных вычислений ваш код надежно поддерживает максимум 14 бит (без переполнения). Если вы хотите поддерживать более 14 бит (например, 64), используйте больший тип, например uint32_t или же uint64_t,


Проблема с удержанием большего количества битов, чем необходимо, заключается в том, что будут отображаться дополнительные биты. Чтобы вырезать их, используйте substr:

cout << bitset<64>(...).to_string().substr(64 - x_temp);

Вот to_string преобразует его в строку с 64 символами, и substr вырезает последние символы, чей номер x_temp,

Вы должны определить const int bits=10; как глобальная константа:

#include <iostream>
#include <math.h>
#include <bitset>

using namespace std;
const unsigned bits=10;
int main() {
    int maximum_value = 0,x_temp=10;

    for (int i = 1; i <= bits; i++) {
        maximum_value += pow(2, bits - i);
    }
    for (int i = maximum_value; i >= 0; i--)
        cout << bitset<bits>(maximum_value - i) << endl;
    return 0;
}

Другие вопросы по тегам