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

问题描述 投票:-2回答:1

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

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

谢谢

c++ c++11 bit-manipulation bitset bitmask
1个回答
3
投票

有一个相当简洁的方法来做到这一点很多人没有立即发现明显的。

这取决于从数字中减去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,然后修剪前导零)。

© www.soinside.com 2019 - 2024. All rights reserved.