You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

cout与printf输出无符号64位整数结果不同的原因

问题原因分析与解决办法

核心问题出在printf格式符与变量类型不匹配,而C++的cout会自动识别变量类型,所以两者输出结果不同:

  • 当循环到i=63时,1ULL << 63的计算结果是0x8000000000000000,这是unsigned long long类型的合法值,对应十进制的9223372036854775808。
  • printf中使用的%lld是**有符号64位整数(long long)**的格式说明符。当传入unsigned long long类型的变量时,printf会强制按照有符号数的规则解析内存中的二进制值:0x8000000000000000作为有符号long long时,最高位是符号位(1代表负数),其余位按补码规则对应最小的负数值-9223372036854775808。
  • C++的cout则会根据变量的实际类型(unsigned long long)自动选择正确的格式化逻辑,因此能输出正确的无符号数值。

修正方法

将printf的格式符替换为unsigned long long对应的%llu即可:

printf("%llu << %d = %llu\n", 1ULL, i, shiftresult);

内容的提问来源于stack exchange,提问作者Marcus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 19:44:51