【发布时间】:2017-01-08 06:44:27
【问题描述】:
#include<stdio.h>
int main(void)
{
struct str
{
int i: 1;
int j: 2;
int k: 3;
int l: 4;
};
struct str s;
s.i = 1;
s.j = 2;
s.k = 5;
s.l = 10;
printf(" i: %d \n j: %d \n k: %d \n l: %d \n", s.i, s.j, s.k, s.l);
getchar();
return 0;
}
网站中给出的输出:
i: 1
j: 2
k: 5
l: 10
我明白了
i :-1
j : -2
k : -3
l : -6
我不明白什么是位域。有人能告诉我这段代码发生了什么吗?
【问题讨论】:
-
阅读您的书或谷歌或搜索此站点以找出位域是什么。而且您的结果与示例不同,因为位域的大多数行为都没有标准化。因此,如果您希望您的代码在不同的或未来的编译器上工作,最好避免使用位域
-
“网站中给出的输出” - 什么网站?
-
int i:1零意义。有符号整数位字段为符号保留位,并且由于您只提供了一位,因此您留下了一个可以为负数或正数的有符号整数位字段,但没有可赎回的幅度值(有没有为值留下位)。此代码的其余部分似乎使违反提供的位(减去符号位)中的最大值成为一种做法。 -
I don't understand what is bit field如果您不知道它是什么,为什么不读一本书和/或谷歌呢? SO 不是您学习基本编程的地方
标签: c struct bit-fields