gpt4 book ai didi

c - 为什么位域必须是整数?

转载 作者:太空狗 更新时间:2023-10-29 15:55:12 26 4
gpt4 key购买 nike

我搜索的每一本书、互联网上的每一个教程以及 SO 上的每一个问答都说,位域必须是整数类型。这是为什么?

最佳答案

让我们问一个相反的问题:

  • 除了整数类型,位域还可以是什么类型?

让我们回顾一下选项:

  1. void:不是一个值——行不通。
  2. 指针:但是机器上的指针是固定大小的;您不能使用 13 位的指针并指望它有任何意义。
  3. 结构、 union :但是你处理的不是简单的字段。
  4. 剩下 floatdouble,但这些都是精心设计的格式,您不能简单地使用 double 中的 13 位(或 float) 并期望它有任何意义。

因此,在完成这些选项之后,剩下的就是各种类型的整数:charshortintlonglong long(有符号和无符号形式)和 _Bool。在这些选项中,标准指定您可以使用 _Boolunsigned intsigned int 和 'plain' int:

ISO/IEC 9899:2011 §6.7.2.1 Structure and union type specifiers

¶5 A bit-field shall have a type that is a qualified or unqualified version of _Bool, signed
int
, unsigned int, or some other implementation-defined type. It is implementation-defined whether atomic types are permitted.

'plain' int 的行为是实现定义的:它可以是有符号的或无符号的(大致像'plain' char 可以是有符号的或无符号的)。所以,jxh的评论是正确的;我粗心地引用了太多类型(但我改写了一些东西,以免误导)。

请注意,位域的大部分行为是实现定义的;除了符号之外,标准很少指定。

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

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