【发布时间】:2022-01-04 08:20:45
【问题描述】:
谁能帮我理解有符号/无符号整数和有符号/无符号字符之间的区别?在这种情况下,如果它是无符号的,值不会永远不会达到负数并继续 0 的无限循环吗?
int main()
{
unsigned int n=3;
while (n>=0)
{
printf ("%d",n);
n=n-1;
}
return 0;
}
【问题讨论】:
-
我建议您在 SO stackoverflow.com/a/5789914 中查看此答案
-
另外,建议您在 print 语句之后放置一个 sleep(),以便您可以按照顺序进行操作。
-
这是一个棘手的问题。是的,它会无限期地运行,但不是因为
n保持为 0。如果你真的运行代码,你会发现print()会打印“3210-1-2-3-4-5...”,因为你给了它格式将n解释为int。事实上,您可以使用printf ("%u",n);之类的东西来打印价值。您将有一次 0,但在下一次迭代中会发生无符号下溢。如果int是4 个字节长,那么0-1 = 0xFFFFFFFF。那是十进制格式的 4294967295。 -
@PavanDittakavi 你到底为什么要在这个问题中添加 C++17 标签?
-
%d是无符号整数的错误printf格式化字符串,这是未定义的行为。虽然在实践中你会看到你的 unsigned int 被解释为一个有符号的 int。