为什么C/C++中没有单一的数据类型?

ilo*_*ahz 7 c c++ boolean bitset

因为bool,它是8位而只有真和假,为什么它们不能使它成为单位.

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

Igo*_*pov 13

主流CPU硬件级别的基本数据结构是一个字节.对这些CPU中的位进行操作需要额外的处理,即一些CPU时间.这同样适用bitset.

  • 实际上,基本数据结构通常是一个字,其宽度通常为4(32位),8(64位)或甚至更多(例如SSE)字节.每字节操作通常在那些较大的字操作中伪造,有时甚至比本机字操作慢,类似于你对位的说法.不要将内存的基本数据结构(例如字节可寻址)与CPU的基本数据结构混淆. (3认同)

Alb*_*ert 12

不完全是为什么没有本机类型的答案.但是你可以在这样的结构中获得一个1位类型:

struct A {
  int a : 1; // 1 bit wide
  int b : 1;
  int c : 2; // 2 bits
  int d : 4; // 4 bits
};
Run Code Online (Sandbox Code Playgroud)

因此,sizeof(A) == 1如果不存在填充(可能将其带到多个sizeof(void*),即32位系统可能为4).

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