给定特定的位集< 32>,如何选择并显示位集的m个LSB位? m是整数值。
例如我有10110111011110111101111011000100和m = 8,代码应该显示11000100。
由于
答案 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
,然后修剪前导零)。