【问题标题】:Why does printf and cout gives different output for this unsigned int? [duplicate]为什么 printf 和 cout 会为这个 unsigned int 提供不同的输出? [复制]
【发布时间】:2017-06-24 05:51:37
【问题描述】:

当我使用两种方式打印 b 的值时,我虽然在控制台上应该是相同的输出,但事实并非如此。

unsigned int b = -1000;
std::cout << b << std::endl;
printf("%d\n",b);

输出:

cout:4294966296
printf:-1000

b 的正确值应该在 0 -> 4294967296 左右。 cout 的输出是正确的。但是,我不明白为什么 printf 保持错误的值?

谁能给我解释一下?

【问题讨论】:

  • 您正在使用%d 打印unsigned int,这会调用未定义的行为。在大多数实现中,它只会将无符号中的位模式视为有符号
  • stackoverflow.com/questions/16864552/… 我的问题不一样。它在谈论错误的格式说明符,没有解释为什么 cout 和 printf 有不同的输出。
  • cout 使用了正确的变量类型,所以很明显它会打印一个无符号值]
  • 谢谢Phuc。我现在明白了,只是因为我使用了错误的格式说明符。

标签: c++


【解决方案1】:

您告诉printf 使用%d 格式说明符打印一个signed int 值。技术上未定义的行为,但大多数实现会将无符号值转换回等效的有符号值以进行打印。

您希望%u 打印一个无符号值。

【讨论】:

  • 谢谢克里斯。我现在明白了,只是因为我使用了错误的格式说明符。
【解决方案2】:

printf("%d\n",b); 由于%d 标志而打印一个带符号的数字。如果你想要一个无符号号码,请使用%u:

printf("%u\n",b);

【讨论】:

  • 感谢 atom,我现在明白了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
  • 2012-07-03
相关资源
最近更新 更多