我想制作一个简单的程序,它将从输入中获取位数并作为输出显示二进制数,写在给定的位上(例如:我输入 3:它显示 000, 001, 010, 011, 100, 101, 110, 111)。
我遇到的唯一问题是第二个for-循环,当我尝试分配变量时位集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
or uint64_t
.
保留比需要的更多位的问题是额外的位将被显示。要剪掉它们,请使用substr
:
cout << bitset<64>(...).to_string().substr(64 - x_temp);
Here to_string
将其转换为 64 个字符的字符串,并且substr
剪切最后一个字符,其编号为x_temp
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)