如何从bitset中检索前几位?

时间:2015-07-21 15:04:50

标签: c++

如果我有一个类似的位置:

std::bitset<8> bs = 00000101;

我怎样才能检索bitset&#34; 101&#34;从bs?为了简单起见,我已经知道我需要前三位。

在@ Baum的帮助下,我到目前为止有这样的事情:

std::bitset<8> bs = 00000101;
int off = 3; // the number of bits I would like
std::string offStr;  // final substring of bitset I wanted
for (std::size_t i = 0; i < off; ++i)
{
      offStr += bs[i];
}
return offStr; // resulting substring

3 个答案:

答案 0 :(得分:0)

如果您

,它将起作用
  1. 在bitset中输入正确的值(即你想要5_10 = 101_2,但你做的是八进制0000101_8 = 65_10),
  2. 将表示正确添加到字符串中。
  3. 尝试以下方法:

    std::bitset<8> bs(5);// = 00000101;
    int off = 3; // the number of bits I would like
    std::string offStr;  // final substring of bitset I wanted
    for (std::size_t i = 0; i < off; ++i)
    {
          offStr += (bs[i] ? "1" : "0");
    }
    

    但请注意,如果您使用std::string::operator+=,则位数将按错误顺序排列,因此要么更改循环,要么更好,预先分配字符串并使用operator[]

答案 1 :(得分:0)

您也可以尝试以下方法:

using namespace std;   
bitset<8> bs(5);// = 00000101;
int off = 3; // the number of bits I would like   
string offStr = bs.to_string().substr(8-off,off);  // final substring of bitset I wanted  

答案 2 :(得分:0)

#include <iostream>

unsigned int clip(unsigned int bitset, const unsigned int offset){
    static const unsigned int integer_bitsize = sizeof(unsigned int) * 8;
    if(offset >= integer_bitsize) return bitset;
    bitset <<= (integer_bitsize - offset);
    bitset >>= (integer_bitsize - offset);
    return bitset;
}

int main(int argc, char *argv[]){
    int a = clip(5, 3);
    int b = clip(13, 3);
    std::cout << a << " " << b << std::endl;
    return 0;
}

使用移位运算符效果很好。只要确保使用 unsigned int。