我怎样才能在内存中准确输入2位?

Saf*_*ari 2 c++ bit-manipulation bit bitset memory-efficient

我应该能够在一个可以从0到3的数据结构中存储一个值.所以我需要2位.这个数据结构我将是2 ^ 16个很棒的位置.所以,我想要2 ^ 16*2(位).在C++中,你使用内存中的2位吗?

Ker*_* SB 9

每单位需要两位(而不是三位),因此可以将四个单位打包成一个字节,或将16个单位打包成一个32位整数.

所以你需要一个std::array<uint32_t, 4096>容纳2 16个单位的2位值.

您可以访问第n 值,如下所示:

unsigned int get(std::size_t n, std::array<uint32_t, 4096> const & arr)
{
    const uint32_t u = arr[n / 16];
    return (u >> (2 * (n % 16))) & 0x3;
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用位域:

struct BF32 {
  uint32_t u0 : 2;
  uint32_t u1 : 2;
  //...
  uint32_t uF : 2;
}
Run Code Online (Sandbox Code Playgroud)

然后做一个std::array<BF32, 4096>.