c - 无符号 long long 不同的结果

标签 c

为什么我得到:

34458730320

3446590374

如果我运行:

#include <stdio.h>

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

我预计第二个是正确的(在 Mathematica、Matlab 中检查)。

最佳答案

整数值

2LLU * 10248428203192896360LLU

溢出 64 位,编译器应该对此发出警告。第一个是正确的

10248428203192896360LLU / 594823321LLU * 2LLU 

因为除法是精确的,没有余数,所以除法后加倍也没关系。

关于c - 无符号 long long 不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55838309/

相关文章:

c++ - 三次贝塞尔曲线交互

C链表——指针间接

c - 程序收到信号 SIGSEGV,段错误,./sysdeps/ieee754/dbl-64/e_log.c : No such file or directory

c - 漏洞利用开发 - GETS 和 Shellcode

C Sockets 客户端/服务器 pthreads 服务器广播

c - 如何编写与 #ifdef...#else...#endif C 预处理器宏匹配的 awk 程序?

C-Linux-有什么方法可以将命令 "history"传递给 Linux shell?

c - UART中断无限循环微芯片

c - c中的指针和字符串解析

c++ - 通过代码的方式减轻该函数的重量