加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 07:17:44 所属栏目:百科 来源:网络整理
导读:我想制作一个简单的程序,它将从输入中获取位数,并作为输出显示二进制数,写在给定位上(例如:我输入3:它显示000,001,010,011,100,101,110,111). 我得到的唯一问题是在第二个for循环中,当我尝试在bitset bits中分配变量时,它需要常数. 如果你能帮我找到解决方
我想制作一个简单的程序,它将从输入中获取位数,并作为输出显示二进制数,写在给定位上(例如:我输入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有一个带有无符号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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读