无符号长长不同结果

时间:2019-04-24 20:45:44

标签: c

我为什么得到:

34458730320

3446590374

如果我跑步:

#include <stdio.h>

int main()
{
    printf("%llu\n",10248428203192896360LLU/594823321LLU*2LLU);
    printf("%llu\n",2LLU*10248428203192896360LLU/594823321LLU);
    return 0;
}

我希望第二个是正确的(已在Matlab中的Mathematica中选中)。

1 个答案:

答案 0 :(得分:1)

整数值

2LLU * 10248428203192896360LLU

溢出64位,编译器应对此进行警告。首先是正确的

10248428203192896360LLU / 594823321LLU * 2LLU 

因为除法是精确的,没有余数,所以除法后加倍并不重要。