我不确定如何正确解释这一点,但我正在寻找一种自动设置orsize
的number
方法bitset<size>
例子
cout << bitset<8>(7) << endl;
具有固定位数的输出
0000 0111
我想以可变位数自动输出,例如输出111
,11001
而不是使用固定位。
基本上我想0
在不使用的时候剪掉前面的
我不确定如何正确解释这一点,但我正在寻找一种自动设置orsize
的number
方法bitset<size>
例子
cout << bitset<8>(7) << endl;
具有固定位数的输出
0000 0111
我想以可变位数自动输出,例如输出111
,11001
而不是使用固定位。
基本上我想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;
}
std::bitset::_Find.first 将找到第一个位的索引。
我们将 n2 转换为字符串,然后我们从索引中找到字符串的子字符串,在该索引中我们找到最高有效位减去总长度 - 1,从而为我们提供所需的结果。
测试用例:
256
100000000