gpt4 book ai didi

c - 位域的类型是什么?

转载 作者:太空狗 更新时间:2023-10-29 16:32:34 26 4
gpt4 key购买 nike

我在 C 标准中找不到指定此内容的任何地方。例如,在

struct { signed int x:1; } foo;

foo.xint 类型的左值,还是其他?它是 int 类型的左值似乎不自然,因为你不能在其中存储任何 int 类型的值,只能存储 0 或 -1,但我找不到任何会为其分配不同类型的语言。当然,在大多数表达式中使用,无论如何它都会被提升为 int,但实际类型在 C11 中使用 _Generic 有所不同,我找不到任何语言在关于位域如何与 _Generic 交互的标准中。

最佳答案

正如 Jonathan 已经引用的那样,p5 清楚地说明了位域的类型。

你还应该记住的是,在 6.3.1.1 中有一个特殊的位域算术转换规则,基本上是说如果一个 int 可以表示一个位域的所有值在大多数表达式中转换int

_Generic 中的类型应该是声明的类型(对符号故障取模),因为那里似乎一致认为算术转换不适用。所以

_Generic((X), int: toto, unsigned: tutu)
_Generic(+(X), int: toto, unsigned: tutu)

如果 X 是一个无符号位域,其宽度所有值都适合 int,则可能会得到不同的结果。

关于c - 位域的类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13105313/

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