【问题标题】:Variable bit length in std::bitset<size>std::bitset<size> 中的可变位长
【发布时间】:2017-03-04 04:47:49
【问题描述】:
我不确定如何正确解释这一点,但我正在寻找一种自动设置bitset<size> 的size 或number 的方法
例子
cout << bitset<8>(7) << endl;
具有固定位数的输出
0000 0111
我想自动输出可变位数,例如输出111 和11001,而不是使用固定位数。
基本上我想在不使用时将前面的0剪掉
【问题讨论】:
-
-
我同意@Caramiriel 的观点,否则您需要手动切断它们,与this 类似。
标签:
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