繁体   English   中英

结构 - 解释输出:

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM