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

标签 c++ bitset std-bitset

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

关于C++ 如何将输入值分配给 std::bitset 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56383006/

相关文章:

gcc - static_cast/float/bitset/const 怪异

C++ 二进制转十进制

java - 如何获取 BitSet 表示的位数?

.net - 如何将 Visual Studio .NET 2003 项目生成信息转换为 VS 命令提示符?

c++ - qt鼠标事件等于触摸屏事件吗?

c++ - 将 74 位整数转换为基数 31

c++ - 为什么 std::bitset 只支持整数数据类型?为什么不支持 float ?

c++ - 为什么 MSVC 在 std::bitset::count 的实现中不使用 __popcnt?

c++ - 编译pimpl成语代码的问题

c++ - std::map::const_iterator 泄露了对值的非常量引用?