C++ How can I assign an input value to a std::bitset argument?

╄→尐↘猪︶ㄣ 提交于 2019-12-01 19:54:08

A numeric ("non-type", as C++ calls it) template parameter must be a compile-time constant, so you cannot use a user-supplied number. Use a large constant number (e.g. 64) instead. You need another integer that will limit your output:

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

Here 64 is some sort of a maximal value you can use, because bitset has a constructor with an unsigned long long argument, which has 64 bits (at least; may be more).

However, if you use int for your intermediate calculations, your code supports a maximum of 14 bits reliably (without overflow). If you want to support more than 14 bits (e.g. 64), use a larger type, like uint32_t or uint64_t.


A problem with holding more bits than needed is that the additional bits will be displayed. To cut them out, use substr:

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

Here to_string converts it to string with 64 characters, and substr cuts the last characters, whose number is x_temp.

You have to define const int bits=10; as a global constant :

#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;
}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!