c - 为什么这段代码在结构中包含冒号?
问题描述
请解释这段代码是如何执行的。为什么我们在结构中使用“:”。结构中冒号的用途是什么。应该是 sizeof 运算符的输出。
#include <stdio.h>
int main()
{
struct bitfield {
signed int a : 3;
unsigned int b : 13;
unsigned int c : 1;
};
struct bitfield bit1 = { 2, 14, 1 };
printf("%ld", sizeof(bit1));
return 0;
}
解决方案
它是位域语法的一部分。这里指的是a
占用 3 位、b
13 位和c
仅 1 位。当然,该结构不会只占用内存中的 17 位,因为它必须与作为最小可寻址内存单元的字节对齐,因此sizeof(bit1)
至少需要 3 个字节(可能它会与与机器字相关的某个值对齐,例如4字节)。您可以在此处阅读有关对齐的更多信息:Structure padding and packing。我假设 1 个字节是 8 位大小,但有一些旧的或奇异的架构,其中字节有另一个大小。
推荐阅读
- r - 在 R 中从 json 转换为数据框时出错
- wordpress - WooCommerce 管理员订单:根据州过滤城市
- javascript - 带有引用泛型类(非实例)类型的字段的 Typescript 泛型接口
- javascript - 如何从 CloudFlare ip 后面的 url 获取网站的真实 IP 地址?
- python - 元组中的python TypeVar重置
- node.js - 开玩笑无法解析节点模块子路径模式导入
- r - 使用 dplyr 创建新的观察计数变量
- lettuce - Redis 客户端 Java 库 Lettuce 在 get 键命令上显示移动的命令
- javascript - FreeCodeCamp Javascript 和 React 计算器挑战正在处理 vs 代码,但无法通过 codepen 测试(测试 #9 和 #13)
- python - tf.random.set_seed() TypeError: 'int' object is not callable