繁体   English   中英

有人可以解释 C 中以下语句的 output 吗?

[英]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 类型时,如果该值可以用新类型表示,则保持不变。

否则,如果新类型是无符号的,则在新类型可以表示的最大值的基础上重复加减一,直到该值在新类型的范围内。

所以-1unsigned int中是不可表示的。 所以我们应该在该值上加上或减去UINT_MAX+1以获得可以用unsigned int表示的东西。 所以我们将UINT_MAX+1添加到-1 ,假设在您的平台上UINT_MAX4294967295 ,我们得到UINT_MAX + 1 - 1 = 4294967295 太好了,现在该值可以用unsigned int表示,并且该值已分配。

为什么这个程序不会抛出错误

因为 C 是一种弱类型语言,在 integer 类型的情况下,某些类型之间的隐式转换只是语言的一部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM