布尔的大小是多少?1位还是1个字节?

use*_*448 -4 c c++ gcc boolean

printf("bool: %zu; true: %zu; 1: %zu\n", sizeof (bool), sizeof true, sizeof 1);
Run Code Online (Sandbox Code Playgroud)

上面的代码产生了

bool: 1; true: 1; 1: 4
Run Code Online (Sandbox Code Playgroud)

我对sizeof(1)很好,它是一个整数,因此大小为4字节.但bool (and true)只需要一个大小1 "bit",输出仍然是1即1个字节.

为什么会这样?

Pau*_*l R 5

对于高效(打包)表示,请使用std :: bitset:

#include <bitset>

std::bitset<2000000> my_bits;
Run Code Online (Sandbox Code Playgroud)

显然这仅适用于C++.在C中你必须自己明确地实现它,例如:

#include <stdint.h>
#include <limits.h>

uint8_t my_bits[2000000 / CHAR_BIT];
Run Code Online (Sandbox Code Playgroud)

然后使用按位运算访问您需要实现一些简单内联函数的各个位.