< p>对于
bool
来说,它只有true和false两个值,却有8位,为什么不把它设计成1位呢?
我知道有bitset
,但是它并不是那么方便,我只是想知道为什么?
并不是对于为什么没有本地类型的答案。但你可以通过像这样在结构体中获得1位类型:
struct A {
int a : 1; // 1 bit wide
int b : 1;
int c : 2; // 2 bits
int d : 4; // 4 bits
};
因此,如果没有填充(可能将其扩大为sizeof(void*)
的倍数,即在32位系统上可能为4),sizeof(A) == 1
是成立的。请注意,由于其他人所述的原因,您无法获取任何这些字段的指针。这也可能是为什么不存在本机类型的原因。在主流CPU的硬件级别上,基本数据结构是字节。在这些CPU上操作位需要额外的处理,即一些CPU时间。对于bitset
同样适用。
bool
是 8 位的"? - Kerrek SBbool
可寻址是有意义的,但这并不意味着没有任何类型是不可寻址的(比如1位类型)。实际上,你可以遇到这种情况(请参见我的答案)。 - Albert_Bool
。它只有1个有效位,但通常还有(Typically 7 or 31)填充位。 - R.. GitHub STOP HELPING ICE