给定特定的bitset <32>,如何选择并显示bitset的m个LSB位? m是整数值。
例如我有10110111011110111101111011000100和m = 8,代码应显示11000100。
谢谢
有一个相当简洁的方法来做到这一点很多人没有立即发现明显的。
这取决于从数字中减去1中的一个重置当前设置的最低有效位,并设置所有不太重要的位。
所以,暂时忽略bitset
部分,只处理一些整数类型,我们可以这样做:
unsigned x = 0b10110111011110111101111011000100;
unsigned m = 8;
unsigned mask = (1 << m) - 1;
unsigned result = x & mask;
我将留给你在std::bitset
操作员中呈现相同的基本想法。
如果你的意图是显示一个没有前导零的bitset,那么......对不起,但它不直接支持,所以如果你这样做:
std::bitset<15> x;
std::cout << x;
无论有多少(或几个)恰好是零,你总能得到15个字符的输出。编写代码可以很容易地跳过自己的前导零(或者将bitset
写入stringstream
,然后修剪前导零)。