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

时间:2018-11-30 20:37:04

标签: c long-integer primitive-types

我有一个简单的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环境中进行了尝试,但在两者中都得到了相同的结果。我检查了类似的帖子,并尝试了解决方法,但是答案无法帮助我解决问题。谢谢您的回答。

1 个答案:

答案 0 :(得分:6)

有问题的值需要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;
}