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

C语言unsigned long long直接乘法结果异常,循环累加却正确?

问题原因与解决方法

你的问题根源是整数运算的类型默认规则导致的溢出:

  • 直接执行260000000 * 25时,两个操作数都是默认的int类型(多数系统中int为4字节,最大值约2147483647)。计算结果6500000000远超int的上限,触发有符号整数溢出。虽然C标准将这种情况定义为未定义行为,但多数编译器会让数值回绕成负数,之后这个负数被转换为unsigned long long类型时,就变成了你看到的异常大值18446744071619617024。

  • 循环累加的方式不会出现这个问题:每次执行num += 260000000时,260000000会被自动提升为unsigned long long类型(因为num是该类型),所有加法操作都在unsigned long long的有效范围内进行,最终得到正确结果。

修复方案

只需要让乘法运算在unsigned long long类型下执行即可,有两种常用方式:

  1. 强制转换其中一个操作数:
num = (unsigned long long)260000000 * 25;
  1. 使用ULL后缀标记其中一个常量为无符号长整型:
num = 260000000ULL * 25;

内容的提问来源于stack exchange,提问作者a regular coder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:35:51