尝试打印一个无符号长整数,但得到一个不同的数字

Trying to print an unsigned long, but getting a different number

我有一个简单的 C 程序。我正在尝试打印数字 1528108405744583338.

这是我的简单代码;

#include<stdio.h>
#include<stdlib.h>

int main()
{
    unsigned long number = 1528108405744583338;
    printf("%lu", number );
    return 0;
}

当我 运行 这段代码时,在控制台上我得到的输出是 2930885290。这里发生了什么?我在 Dev-C++、C-Free 5.0 环境中尝试过,但在两者中得到了相同的结果。我检查了类似的帖子,并尝试了解决方法,但答案无法帮助我解决问题。谢谢你的回答。

相关值需要 64 位数据类型,而 unsigned long 不一定是 64 位。保证至少为 32 位。因此,如果您的系统对 unsigned long 使用 32 位,您将获得您获得的值,如果它对 unsigned long 使用 64 位,您将获得预期值。

unsigned long long 一定会保持这个值,所以请改用它。

#include<stdio.h>
#include<stdlib.h>

int main()
{
    unsigned long long number = 1528108405744583338ULL;
    printf("%llu", number );
    return 0;
}