【发布时间】:2015-01-19 06:45:21
【问题描述】:
unsigned int 在 C 中的大小是 0 to 65,535 or 0 to 4,294,967,295。
我在 C 中使用以下代码进行了测试:
unsigned int number = 0;
number -= 300;
printf("%d\n", number);
输出:-300
我记得如果 unsigned int 变量的值低于 0,它应该回绕,我希望输出类似于 4294966996。但是从控制台打印的输出是-300。
我在 C++ 中测试了类似的语句,它确实给了我4294966996。
我的问题是:为什么输出是-300,尽管它是unsigned int?
PS:我浏览了几篇标题相似的帖子,但它们并没有解决相同的问题:
【问题讨论】:
-
printf是一个哑函数。您必须确保将其传递给它期望的类型! -
请记住,使用有符号整数格式字符串打印无符号整数是未定义的行为。
-
最后一个问题:我是否正确地说,如果我用 %d 打印它,它会在打印前将其隐式转换为已签名?
-
我认为对于如何实现
printf没有要求,它可能只是用char*为您的参数别名,并将字节解析为适当的 c 字符串(基于您的格式字符串)