你能解释下面结构代码的输出吗?

时间:2017-03-16 14:59:17

标签: c struct printf

我在google上搜索了很多关于以下问题的文章,但仍未找到任何好的答案。 从我第一次看,我能得到int x:3这里3是宽度如果我们指定x值大于3一些负值得到打印,如果我们指定小于3的值,则指定的值得到正确打印。 任何人都可以解释这段代码的输出结果。

     #include<stdio.h>
      1  struct Point
      2  {
      3  int x:3, y:4;
      4  };
      5 
      6  int main()
      7 {
      8  struct Point p1 = {6,3};
      9 
      10 printf ("x = %d, y = %d", p1.x, p1.y);
      11
      12  return 0;
      13  }

The output comes as:

    x = -2, y = 3

when i included stdio.h header file warning vanished but the output of x get chnaged first without header file the value of x is coming -4 now with stdio.h header file the value of x becomes -2.Why this is happening?? 

提前致谢!!

1 个答案:

答案 0 :(得分:4)

您正尝试将值6存储为3位有符号整数,其中有2个值位和1位保留用于符号。因此,不能适合2个值位的值6以实现定义的方式转换为有符号值。显然是使用Two's complement

“警告:隐式常量转换溢出”告诉你这一点。编译器尝试在签名类型位字段中显示常量6。我无法适应 - 你得到溢出,然后有一个隐式类型转换为签名类型。