[英]Struct - Explain the output:
我有以下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
,对吗?
如果我错了请解释。
-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。
希望能帮助到你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.