I want to make a simple program that will take number of bits from the input and as an output show binary numbers, written on given bits (example: I type 3: it shows 000, 001, 010, 011, 100, 101, 110, 111). The only problem I get is in the second for-loop, when I try to assign variable in bitset<bits>, but it wants constant number. If you could help me find the solution I would be really greatful. Here's the code:
#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;
}
You have to define const int bits=10; as a global constant :
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:
Here 64 is some sort of a maximal value you can use, because
bitset
has a constructor with anunsigned 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, likeuint32_t
oruint64_t
.A problem with holding more bits than needed is that the additional bits will be displayed. To cut them out, use
substr
:Here
to_string
converts it to string with 64 characters, andsubstr
cuts the last characters, whose number isx_temp
.