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

时间:2014-09-29 07:53:16

标签: c++ c gcc boolean

printf("bool: %zu; true: %zu; 1: %zu\n", sizeof (bool), sizeof true, sizeof 1);

以上代码产生

bool: 1; true: 1; 1: 4

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

为什么会这样?

3 个答案:

答案 0 :(得分:5)

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

#include <bitset>

std::bitset<2000000> my_bits;

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

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

uint8_t my_bits[2000000 / CHAR_BIT];

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

答案 1 :(得分:2)

最小可寻址单位是字节。每个对象都应有自己的地址。 sizeof运算符也返回对象占用的字节数。即使C ++中的空结构也应具有非零大小。

您可以使用标准类std::bitset而不是布尔数组。

答案 2 :(得分:2)

编译大小为std::bitset<N>的替代方法是使用具有动态大小的特化std::vector<bool>。但关注,它不会作为常规容器,因为它提供proxy来访问个别位。