结构 - 解释输出:

时间:2013-09-01 15:33:07

标签: c struct bit-fields

我有以下C代码。

struct values{
  int a:3;
  int b:3;
  int c:2;
};

void main(){
  struct values v={2,-6,5};
  printf("%d %d %d",v.a,v.b,v.c); 
}

当我执行代码时,我得到以下输出:

2 2 1.

但输出应为2 -6 5,对吗?

如果我错了请解释。

3 个答案:

答案 0 :(得分:5)

-6超出了3位signed int的范围。因此,您正在观察未定义实现定义行为的工件(实际上,您的值中最重要的部分将被丢弃)。

答案 1 :(得分:4)

{2,             |  -6,             |        5        }
010 last 3 bits |  010 last 3 bits |  01 last 2 bits
2                  2                        1    

答案 2 :(得分:1)

没有。输出为2 2 1

C编译器将值转换为Binary,并存储在内存中。

二进制值2:00000010

二进制值-6:11111010(11111001 + 1)

二进制值5:00000101

存储在内存中:

对于2,将存储010。

对于-6,将存储010。

对于5,将存储01。

当您从main方法访问这些变量时,对于v.a将返回“010”,此处最左边的位用于符号。

所以v.a是2.类似地,v.b是2,v.c是1。

希望它有所帮助。