【问题标题】:Selecting Specific range bits from a bitset and displaying it从位集中选择特定范围位并显示它
【发布时间】:2018-06-03 17:55:44
【问题描述】:

给定一个特定的位集,如何选择和显示该位集的 m 个 LSB 位? m 是一个整数值。

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

谢谢

【问题讨论】:

  • Here's a documentation of the API。我相信你能弄清楚。
  • 我尝试移动它,并且能够显示 0000000000000000000000011000100。我正在尝试摆脱 0。我知道这是一个幼稚的问题,但我只是想知道如何编码。

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


【解决方案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,然后修剪前导零)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 2019-01-04
    相关资源
    最近更新 更多