布尔值的大小是多少?1 位或 1 字节

What is the size of bool? 1 bit or 1 byte?

本文关键字:位或 字节 多少 布尔值      更新时间:2023-10-16
printf("bool: %zu; true: %zu; 1: %zun", sizeof (bool), sizeof true, sizeof 1);

上面的代码段产生

bool: 1; true: 1; 1: 4

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

为什么会这样?

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

#include <bitset>
std::bitset<2000000> my_bits;

显然,这仅适用于C++。在 C 语言中,您必须自己显式实现这一点,例如:

#include <stdint.h>
#include <limits.h>
uint8_t my_bits[2000000 / CHAR_BIT];

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

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

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

编译

大小std::bitset<N>的替代方法是使用具有动态大小的专用化std::vector<bool>。但请注意,它不充当常规容器,因为它提供代理来访问单个位。