[英]Can someone explain the output of following statement in C?
我在控制台上运行以下代码,但我无法理解这个 output?为什么这个程序不抛出错误而是打印一个值?
#include<stdio.h>
int main()
{
unsigned int a = -1;
printf("%u",a);
}
Output:4294967295
我无法理解这个 output?
有signed int
值-1
被转换为unsigned int
。 从C11 6.3.1.3p2 开始,将有符号值转换为unsigned int
的“新类型”(您可能会发现cppreference 隐式转换页面更容易接近):
当一个 integer 类型的值转换为除 _Bool 之外的另一个 integer 类型时,如果该值可以用新类型表示,则保持不变。
否则,如果新类型是无符号的,则在新类型可以表示的最大值的基础上重复加减一,直到该值在新类型的范围内。
所以-1
在unsigned int
中是不可表示的。 所以我们应该在该值上加上或减去UINT_MAX+1
以获得可以用unsigned int
表示的东西。 所以我们将UINT_MAX+1
添加到-1
,假设在您的平台上UINT_MAX
是4294967295
,我们得到UINT_MAX + 1 - 1 = 4294967295
。 太好了,现在该值可以用unsigned int
表示,并且该值已分配。
为什么这个程序不会抛出错误
因为 C 是一种弱类型语言,在 integer 类型的情况下,某些类型之间的隐式转换只是语言的一部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.