结构 – 解释输出:

我有以下C代码。

struct values{ int a:3; int b:3; int c:2; }; void main(){ struct values v={2,-6,5}; printf("%d %d %d",va,vb,vc); } 

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

 2 2 1. 

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

如果我错了请解释。

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

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

不。输出是2 2 1

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

二进制值2: 00000010

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

二进制值为5: 00000101

存储在内存中:

对于2,将存储010。

对于-6,将存储010。

对于5,将存储01。

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

所以va是2.类似地,vb是2,vc是1。

希望能帮助到你。