为什么cout和printf产生不同的结果?

问题描述 投票:0回答:1

我正在学习 C/C++ 并开始尝试使用大数字进行编程,但是在打印它们时出现了一个奇怪的错误。

这是我的示例代码:

unsigned long long shiftresult = 1ULL;
for (int i = 0; i < 64; i++) {
    shiftresult = (1ULL << i);
    printf("%lld << %d = %lld\n", 1ULL, i, shiftresult);
    cout << 1ULL << " << " << i << " = " << shiftresult << endl;
}

问题在于,当循环到达

i = 63
时,printf打印
-9223372036854775808
,而cout打印
9223372036854775808
,这是“真实”输出。

有人可以解释为什么会发生这种情况吗?

c++ c printf cout unsigned-long-long-int
1个回答
0
投票

您对

printf
使用了错误的格式说明符。

%lld
格式说明符需要一个
long long
参数,但您传递的是
unsigned long long
参数,因此无符号数将被解释为有符号数。

您需要使用

%llu
打印
unsigned long long

© www.soinside.com 2019 - 2024. All rights reserved.