结构 – 解释输出:
我有以下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。
希望能帮助到你。