为什么printf和cout为此无符号int提供了不同的输出

Why does printf and cout gives different output for this unsigned int?

本文关键字:输出 int printf cout 无符号 为什么      更新时间:2023-10-16

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

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

输出:

cout: 4294966296
printf: -1000

b 的正确值应围绕 0-> 4294967296 COUT的输出正确。但是,我不明白为什么 printf 保持错误的值?

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

您正在告诉printf使用%d格式指定器打印签名 int值。技术上不确定的行为,但是大多数实现将将未签名的值转换回等于签名的值以打印。

您要%u打印无符号值。

printf("%dn",b);由于%d标志而打印一个签名的号码。如果您想要一个无符号号码,请使用%u

printf("%un",b);