Struct - Explain the output:

折月煮酒 提交于 2019-12-01 22:55:59

问题


I have the following C code.

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); 
}

When I execute the code, I am getting the following output:

2 2 1.

But output should be 2 -6 5, right?

If I'm wrong please explain.


回答1:


-6 exceeds the range of a 3-bit signed int. Therefore you're observing an artifact of undefined implementation-defined behaviour (in practice, the most-significant bits of your value are being thrown away).




回答2:


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



回答3:


No. Output is 2 2 1.

The C compiler converts the values to Binary, and stores in the memory.

Binary value of 2 : 00000010

Binary value of -6: 11111010 (11111001+1)

Binary value of 5 : 00000101

While storing in memory:

For 2, 010 will be stored.

For -6, 010 will be stored.

For 5, 01 will be stored.

When you access these variables from your main method, for v.a "010" will be returned, here left most bit is for sign.

So v.a is 2. Similarly v.b is 2 and v.c is 1.

Hope it helps.



来源:https://stackoverflow.com/questions/18559951/struct-explain-the-output

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!