64位变量存储为32位

时间:2014-11-05 13:30:29

标签: c types compilation

在ARM交叉编译器中使用unsigned long long

类型的变量进行编译时遇到了一些问题

该变量表示分区大小(~256GBytes)。我希望它存储为64位,但在使用%lld打印时,或者甚至尝试将其打印为Mega字节(value/(1024*1024*1024))时,我总是看到实际值的唯一32位。

有谁知道为什么编译器将它存储为32位?

编辑:

我的错误,使用以下计算在C中设置值:

partition_size = st.f_bsize*st.f_frsize;
struct statvfs { unsigned long int f_bsize; unsigned long int f_frsize; ...}

问题是f_bsizef_frsize只有32位,编译器不会自动将它们转换为64位! Casting为我解决了这个问题。

2 个答案:

答案 0 :(得分:2)

我的错误........ 使用以下计算在C中设置该值:

partition_size = st.f_bsize * st.f_frsize;

struct statvfs {unsigned long int f_bsize; unsigned long int f_frsize; ...}

问题是f_bsize& f_frsize只有32位,编译器不会自动将它们转换为64位!

Casting为我解决了这个问题。

答案 1 :(得分:1)

以下代码打印整个64位。尝试使用%llu

打印
  main()
    {
    unsigned long long num = 4611111275421987987;
    printf("%llu\n",num);
    }