【问题标题】:Variable bit length in std::bitset<size>std::bitset<size> 中的可变位长
【发布时间】:2017-03-04 04:47:49
【问题描述】:

我不确定如何正确解释这一点,但我正在寻找一种自动设置bitset&lt;size&gt;sizenumber 的方法

例子

cout << bitset<8>(7) << endl;

具有固定位数的输出

0000 0111

我想自动输出可变位数,例如输出11111001,而不是使用固定位数。

基本上我想在不使用时将前面的0剪掉

【问题讨论】:

标签: c++ bitset std-bitset


【解决方案1】:

这实际上是两个问题合二为一。第一个是如何修剪输出给定的位集(即删除前导0's),第二个是如何将输出减小到给定大小。

由于您只对ostream 输出感兴趣,因此使用bitset::to_string() 转换函数应该非常合适,然后应用string::substr

有了这个,对于你的例子——你似乎想保留7位——你会得到:

std::cout << std::bitset<8>{}.to_string().substr(1) << std::endl;  //removes the first bit 

您可以将其与查找第一个设置位的方法相结合,以构造trim 函数。

【讨论】:

    【解决方案2】:
    int main() {
        int n;
        cin >> n;
        bitset<64> n2(n);
        cout << n2.to_string().substr(64-n2._Find_first()-1) << endl;
    }
    

    std::bitset::_Find.first 将查找第一个位的索引。

    我们将 n2 转换为字符串,然后从索引中找到字符串的子字符串,在该索引中我们找到最高有效位减去总长度 - 1,从而给我们所需的结果。

    测试用例:
    256
    100000000

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-24
      • 2014-10-13
      • 2011-06-10
      • 1970-01-01
      • 2020-03-22
      • 1970-01-01
      • 2013-05-28
      相关资源
      最近更新 更多