为什么printf和cout为这个unsigned int提供不同的输出?

时间:2017-06-24 05:51:37

标签: c++

当我使用两种方式打印 b 的值时,虽然它在控制台上应该是相同的输出,但它没有。

{{1}}

输出:

cout:{{1}}
printf:{{1}}

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

任何人都可以向我解释一下吗?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

由于printf("%d\n",b);标志,

%d会打印带符号的数字。如果您想要无符号数,请使用%u

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