【发布时间】: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++