布尔值的大小是多少?1 位或 1 字节
What is the size of bool? 1 bit or 1 byte?
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>
。但请注意,它不充当常规容器,因为它提供代理来访问单个位。
相关文章:
- qmake:检测目标位宽(32 位或 64 位)
- 如何通过使用 2 位或更多数字的 XOR 运算符来执行此操作C++问题
- 位集上的按位或给出错误的答案
- 位集构造函数中的一元按位或折叠
- 什么是用途 |(按位或运算符)在setiosflags的上下文中?
- 我们是否需要担心 32 位或 64 位整数,或者我们只使用 'int'
- 准备要传递给 jni 的位图字节 [] 数据
- 为MSVC建造GTEST:32位或64位
- 您能否给我一个 16 位(或更多)十进制数,该十进制数仅在第 15 位正确转换为双精度浮点圆
- 我不明白为什么当我按位或短字符时得到这个结果
- 位在字节序中是否重要
- MSVC:在64位代码中读取特定的64位或32位寄存器(例如R10)
- Visual Studio - C++ - 以 32 位或 64 位构建和运行应用程序 - 从适当的程序文件目录加载 D
- 使用Solaris 64位或Linux 32位到Linux 64位的内存映射文件
- 是什么使C++程序仅是 64 位或受机器限制
- 对返回0数组的数组执行位"或"或"异或"运算
- C++ 中的 10 位或 12 位字段数据类型
- 状态标志是如何表示的,以及如何使用位“或”来处理位标志
- 32位或64位操作系统如何影响数据类型范围
- 布尔值的大小是多少?1 位或 1 字节