从位集中选择特定范围位并显示它

时间:2017-12-21 05:27:15

标签: c++ c++11 bit-manipulation bitset bitmask

给定特定的位集< 32>,如何选择并显示位集的m个LSB位? m是整数值。

例如我有10110111011110111101111011000100和m = 8,代码应该显示11000100。

由于

1 个答案:

答案 0 :(得分:3)

这是一个相当简洁的方法,许多人不会立即发现明显。

这取决于从数字中减去1中的一个重置当前设置的最低有效位,并设置所有不太重要的位。

因此,暂时忽略bitset部分,只处理某种整数类型,我们可以这样做:

unsigned x = 0b10110111011110111101111011000100;

unsigned m = 8;

unsigned mask = (1 << m) - 1;

unsigned result = x & mask;

我会留给您在std::bitset运营商中提出相同的基本想法。

如果你的目的是显示一个没有前导零的位集,那么......对不起,但它并不直接支持,所以如果你这样做:

std::bitset<15> x;

std::cout << x;

总是得到正好15个字符的输出,无论有多少(或几个)恰好是零。编写代码可以很容易地跳过自己的前导零(或者将bitset写入stringstream,然后修剪前导零)。