最小的数据类型 - 我可以定义一位变量吗?

Roy*_*Roy 13 c types

我只需要一位来表示我的数据 - 1或0.在C中这样做的最佳方法是什么?"正常"数据类型太大.

Bat*_*eba 17

你可以创造

typedef struct foo
{
    unsigned x:1;
} foo;
Run Code Online (Sandbox Code Playgroud)

你告诉编译器你只会使用一位的地方x.

但是由于结构填料的安排(C标准是为了故意灵活该编译器能够根据机器体系结构优化),它很可能会证明,这仍然在存储器中占据尽可能多的空间作为常规unsigned和阵列foo小号没有按"必须是按位连续的.

  • 在结构周围使用`#pragma pack(1)` 和`#pragma pack(0)` 会避免你解释的打包安排吗? (2认同)

Sou*_*osh 5

如果您真的想要,可以使用成员变量创建一个结构,为1位.

请记住,成员变量的数据类型需要unsigned,因为您需要存储01.


小智 5

如果你不需要数百万个这样的标志或者内存限制非常有限,那么最好的办法绝对是int.

这是因为int通常对应于平台的自然字大小,并且可以快速访问正确对齐的内容.无论如何,机器一次读取一个字,并且使用单个位需要屏蔽和移位,这需要花费时间.在具有千兆字节RAM的典型PC上,这将是愚蠢的.

如果内存消耗确实存在问题,则存在位域结构.