【发布时间】:2014-07-08 18:44:40
【问题描述】:
我有一个关于 C++ 中的位打包的问题。
假设我们有一个用 C++ 定义的结构。如下:
typedef struct
{
unsigned long byte_half : 4; //0.5
unsigned long byte_oneAndHalf : 12; //2
union
{
unsigned long byte_union_one_1 : 8; //3
unsigned long byte_union_one_2 : 8; //3
unsigned long byte_union_one_3 : 8; //3
};
unsigned long byte_one : 8; //4
}LongStruct;
这是一个名为 LongStruct 的结构。从外观上看,它占用了 4 个字节,并且可以放入一个 long 中。现在我执行以下行:
int size = sizeof(LongStruct);
我看了一下大小,期望它的值是 4。结果我得到了 12。我以什么方式错误地可视化了我的结构?
提前感谢您能给我的任何帮助。
【问题讨论】:
-
将
long更改为char(或short用于12 位字段)。 -
看在上帝的份上,不要使用邪恶的
typedef struct {..} name;建设 -
我建议去掉 C# 部分。如果你想得到答案,请发布另一个问题。
标签: c++ struct unions bit-fields