9

因为bool,它是 8 位的,而只有真假,他们为什么不把它做成一个位。

而且我知道有bitset,但是它不那么方便,我只是想知道为什么?

4

2 回答 2

16

主流CPU硬件层面的基本数据结构是字节。对这些 CPU 中的位进行操作需要额外的处理,即一些 CPU 时间。对于bitset.

于 2013-10-12T11:16:10.163 回答
16

不完全是为什么没有原生类型的答案。但是您可以在这样的结构中获得 1 位类型:

struct A {
  int a : 1; // 1 bit wide
  int b : 1;
  int c : 2; // 2 bits
  int d : 4; // 4 bits
};

因此,sizeof(A) == 1可能是如果没有填充(这可能会将其变为 的倍数sizeof(void*),即对于 32 位系统可能为 4)。

请注意,由于其他人陈述的原因,您无法获得指向任何这些字段的指针。这也可能是为什么不存在原生类型的原因。

于 2013-10-12T11:19:47.507 回答