gpt4 book ai didi

c - 位域在 union 中未按预期工作

转载 作者:行者123 更新时间:2023-12-04 05:51:11 24 4
gpt4 key购买 nike

谁能告诉我为什么断言失败?

仅供引用:我正在 64 位 linux 机器上使用 gcc 4.6.1 编译它。

typedef union cpu_register {
uint64 _64;
uint32 _32;
uint16 _16;
uint16 _8l : 8,
_8h : 8;
} __attribute__((packed)) cpu_register;

int main()
{
cpu_register reg;
reg._64 = 1;
assert(reg._8h != reg._8l);
return 0;
}

reg._8h 的预期值为 0,但与 reg._8l (== 1) 的值相同。

我有一个解决方案来克服这个问题,但我想知道出了什么问题?

最佳答案

看起来你想要

uint16 _8l : 8,
_8h : 8;

是 16 位整数的低位和高位。

但是这些在一个 union 中,并且 union 的每个元素实际上代表整个 union 。所以它们都指向相同的 8 位。

您需要将它们包装在一个结构中:
struct {
uint16 _8l : 8,
_8h : 8;
}

然后将这个结构放入 union 中。

关于c - 位域在 union 中未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10020449/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com