标准::位集中<size>的可变位长度

Variable bit length in std::bitset<size>

本文关键字:gt lt 标准 size 集中      更新时间:2023-10-16

我不知道如何正确解释这一点,但我正在寻找一种方法来自动设置bitset<size>sizenumber自动

示例

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

具有固定位数的输出

0000 0111

我想像输出11111001那样自动输出可变位数的比特,而不是使用固定比特。

基本上,当不使用时,我想把0的前面剪掉

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

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

这样,对于您的示例——您似乎希望保留7位——您将得到:

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

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

int main() {
    int n;
    cin >> n;
    bitset<64> n2(n);
    cout << n2.to_string().substr(64-n2._Find_first()-1) << endl;
}

CCD_ 13将找到第一个on位的索引。

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

测试用例:

256
100000000