Saf*_*ari 2 c++ bit-manipulation bit bitset memory-efficient
我应该能够在一个可以从0到3的数据结构中存储一个值.所以我需要2位.这个数据结构我将是2 ^ 16个很棒的位置.所以,我想要2 ^ 16*2(位).在C++中,你使用内存中的2位吗?
每单位需要两位(而不是三位),因此可以将四个单位打包成一个字节,或将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>.