位字段的整数类型是重要的,还是基本上是一次性的,例如:
struct font {
int bold : 1;
int italics : 2;
int underline : 1;
};与
struct font {
unsigned int bold : 1;
unsigned int italics : 2;
unsigned int underline : 1;
};与
struct font {
char bold : 1;
char italics : 2;
char underline : 1;
};不同的整数类型在这里“做”什么,或者它基本上是一个占位符?
发布于 2021-02-26 06:44:19
位字段是使用有符号类型还是无符号类型会使它可以容纳的值有所不同。在您的第一个示例中bold可以保持值0或-1,而在第二个示例中bold可以包含值0和1。
C标准特别允许int, unsigned int,或者_Bool作为位字段的类型,并支持实现定义的其他类型。大多数实现将允许位字段的任何整数类型。
对于那些这样做的人,类型指定了位字段所在的"bucket“的大小,因此它可以影响结构的大小。在gcc下的机器上,前两个结构的大小为4,而第三个结构的大小为1。
https://stackoverflow.com/questions/66377485
复制相似问题