我想制作一个简单的程序,它将从输入中获取位数,并作为输出显示二进制数,写在给定的位上 (例如:我输入 3:它显示 000、001、010、011 , 100, 101, 110, 111)。 我遇到的唯一问题是在第二个 for 循环中,当我尝试在 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;
}
最佳答案
数字(“非类型”,如 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
。
关于C++ 如何将输入值分配给 std::bitset 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56383006/