位域的整数类型
Integer type of a bitfield
位域的整数类型重要吗,还是基本上是一次性的,例如:
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;
};
这里有不同的整数类型吗'do',或者它基本上是一个占位符?
位域是使用有符号类型还是无符号类型会导致它可以容纳的值不同。在您的第一个示例中,bold
可以保存值 0 或 -1,而在您的第二个示例中,bold
可以保存值 0 和 1。
C 标准特别允许 int
、unsigned int
或 _Bool
作为位域的类型,并支持其他实现定义的类型。大多数实现将允许位字段使用任何整数类型。
对于那些这样做的人,类型指定了位域所在的“桶”的大小,因此它会影响结构的大小。在我使用 gcc 的机器上,前两个结构的大小为 4,而第三个结构的大小为 1。
位域的整数类型重要吗,还是基本上是一次性的,例如:
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;
};
这里有不同的整数类型吗'do',或者它基本上是一个占位符?
位域是使用有符号类型还是无符号类型会导致它可以容纳的值不同。在您的第一个示例中,bold
可以保存值 0 或 -1,而在您的第二个示例中,bold
可以保存值 0 和 1。
C 标准特别允许 int
、unsigned int
或 _Bool
作为位域的类型,并支持其他实现定义的类型。大多数实现将允许位字段使用任何整数类型。
对于那些这样做的人,类型指定了位域所在的“桶”的大小,因此它会影响结构的大小。在我使用 gcc 的机器上,前两个结构的大小为 4,而第三个结构的大小为 1。