让我们提出相反的问题:
让我们回顾一下这些选项:
void:没有值-无法使用。float或double,但是这些是经过精心设计的格式,您不能简单地使用double(或float)中的13位来期望它的含义。所以,你已经通过了方案后,你留下了各种类型的整数:char,short,int,long,long long(在符号和无符号的形式),和_Bool。这些选项中,该标准规定,您可以使用_Bool,unsigned int,signed int和“平原” int:
ISO / IEC 9899:2011§6.7.2.1 结构和联合类型说明符
¶5位字段应具有一种类型,是一个合格的或不合格的版本
_Bool,signed int,unsigned int,或一些其他实现定义类型。是否允许原子类型由实现定义。
'plain'的行为int是由实现定义的:它可以是签名的也可以是未签名的(大致类似于'plain' char可以是签名的也可以是未签名的)。因此,jxh的评论是正确的;我粗心地引用了太多的类型(但是我改写了一些东西,以免引起误解)。
请注意,大多数位字段的行为都是由实现定义的。除符号外,标准中所指定的内容很少。