繁体   English   中英

C ++如何为std :: bitset参数分配输入值?

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

我想制作一个简单的程序,该程序将从输入中获取位数,并在输出中显示在给定位上写入的二进制数(例如:我键入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_tuint64_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;
}

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM