C语言中:unsigned int a=-2;printf("%u",a);输出结果为多少?

如题所述

在16位int平台下,输出是65534;在32位int平台下,输出是4294967294。以32位int平台为例,题中的unsigned
int
a=-2;语句在unsigned的修饰下,赋给变量a的是-2补码的无符号值,即4294967294。但后面的printf("%u",a);的输出并不与a是否为有符号数没有关系,输出是否为有符号数由"%u"中的控制符%u决定,这里%u表示将变量a按无符号数输出,所以输出是4294967294。因此,如果将unsigned
int
a=-2;改为int
a=-2;,printf("%u",a);同样输出4294967294。即使是unsigned
int
a=4294967294;这样定义a,用printf("%d",a);输出就是-2;因为输出是由控制符%d决定的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-04-03
在VC等32位编译系统上-2的补码是11111111111111111111111111111110
若解释为unsigned
int则为4294967294
同理unsigned
int
a=-2;printf("%d",a);虽然定义a是unsigned类型,但printf();函数中解释为int类型,输出结果还是-2。内存中的2进制数据不同的解释方式,有不同的显示结果。
第2个回答  2019-10-07
a=-2,b、c为无符号型,将有符号的a赋给无符号的b,系统应该会自动将b转换为有符号整型,最后按有符号整型(%d)输出,为-2,c=b也一样,不过最后按无符号输出,所以应该是个随机值
第3个回答  2020-05-16
应该是4294967295-2+1=4294967294
因为unsigned
int
a=-2;这句会强制把负数,转换成正数
大家正在搜