我在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??
提前致谢!!
答案 0 :(得分:4)
您正尝试将值6存储为3位有符号整数,其中有2个值位和1位保留用于符号。因此,不能适合2个值位的值6以实现定义的方式转换为有符号值。显然是使用Two's complement。
“警告:隐式常量转换溢出”告诉你这一点。编译器尝试在签名类型位字段中显示常量6
。我无法适应 - 你得到溢出,然后有一个隐式类型转换为签名类型。