c - 位域的整数类型
问题描述
位域的整数类型是否重要,或者它基本上是一次性的,例如:
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;
};
不同的整数类型在这里“做”什么,或者它基本上是一个占位符?
解决方案
位域使用有符号或无符号类型会导致它可以保存的值不同。在您的第一个示例bold
中可以保存值 0 或 -1,而在您的第二个示例bold
中可以保存值 0 和 1。
C 标准特别允许int
, unsigned int
, 或_Bool
作为位字段的类型,并支持其他类型的实现定义。大多数实现将允许位字段的任何整数类型。
对于那些这样做的人,类型指定了位域所在的“桶”的大小,因此它可以影响结构的大小。在我的 gcc 机器上,前两个结构的大小为 4,而第三个结构的大小为 1。
推荐阅读
- graphql - SSR 和 GraphQL:如果不存在 javascript(SEO 目的),如何避免加载状态?
- macos - 在 Mac 上使用 VS 2019 生成的 docker compose 文件时出现问题
- c# - Blazor 输入掩码
- python - 未找到 Kivy 的模块
- python - 使用列表在python中创建数字网格
- apache-kafka - Kafka 服务器未与 Zookeeper 服务器远程连接
- c - 出现几个 CMake 错误
- python - 在 PyCharm 中找不到 PyQt5
- git - 关闭终端窗口后Git合并获取源分支名称
- flutter - Dart/Flutter ffi(外部函数接口)本机回调,例如:sqlite3_exec