-3

我在 C++ 中尝试了 bitset 类,并以数字 137 为例进行了尝试:所以,我将其转换为二进制数,得到 10001001。现在,我想切断 MSB 并将其余位 0001001 存储在另一个名为 bitarray 的位实例,我期待在 bitarray 中看到它,但它没有给出正确的值。可能是什么问题?我只是想将 MSB 从 137 二进制表示中的其余位中分离出来......这是代码:

bitset<8> bitarray;

bitset<8> bitsetObject(num);
int val = bitsetObject.size();

for (int i = 0; i <= (val - 1); i++)
{
    if (i == 6)
        break;
    else
        bitarray[i] = bitsetObject[i + 1];
}

如果有人知道我如何轻松地从 bitsetObject 数组中的第二个元素切片到最后一个元素,请告诉我。谢谢..

4

2 回答 2

2

如果您只是想bitset用最重要的设置位重置一个新对象,请考虑以下事项:

template<std::size_t N>
std::bitset<N> strip_mssb(std::bitset<N> bitarray)
{
    for (std::size_t i = bitarray.size(); i--;)
        if (bitarray[i])
        {
            bitarray.reset(i);
            break;
        }
    return bitarray;
}

在线演示。

于 2012-09-21T21:33:13.123 回答
1

您设置bitarray[0]等于bitsetObject[1],即 0(假设num实际上是 137)。

您似乎期望 的最小位bitarray等于 1。

于 2012-09-21T21:30:28.773 回答