struct node
{
double a : 23;
int b;
}s;
int main()
{
printf("%d\n",sizeof(s));
}
为什么会产生编译错误?我想知道为什么我们不能用双数据类型做位域。
答案 0 :(得分:5)
我的回答是C.我不知道它是否适用于C ++ 我建议你不要尝试编写多语言源文件。这很辛苦。
printf
sizeof(s)
的类型和"%d"
所需的类型不匹配return 0;
你得到什么编译器错误?
我想知道我们不能用双数据类型
做按位
因为the C99 Standard这样说,例如(强调是我的)
6.7.2.1/9
比特字段被解释为由指定的有符号或无符号整数组成的 比特数。
答案 1 :(得分:4)
C提供了一种特殊类型的结构成员,称为位字段,它是integer with an explicitly specified number of bits.
非整数类型不能用作位字段的基类型。
答案 2 :(得分:3)
引自维基:
C还提供了一种特殊类型的结构成员,称为位字段,它是一个具有明确指定位数的整数。位字段被声明为int,signed int,unsigned int或_Bool类型的结构成员,后跟成员名称冒号(:)和它应占用的位数。单个位字段中的总位数不得超过其声明类型中的总位数。
在语句double a : 23;
中你使用的是bit字段为double,这是一个错误。你应该使用int代替。
编辑: 行为是依赖于实现的使用除了这些之外的任何东西.Char可能在您的系统上工作,但它可能在其他平台上失败,因为它不是标准的一部分。
答案 3 :(得分:2)
是的,你不能将位字段应用于double,这就是它给出编译错误的原因。 只有签名的& amp; unsigned int,_ bool数据类型。