C 64位变量存储为32位

C 64位变量存储为32位,c,types,compilation,C,Types,Compilation,在ARM交叉编译器中使用类型为unsigned long-long 该变量表示分区大小(~256GB)。我希望它存储为64位,但在使用%lld打印它时,甚至尝试将其打印为兆字节(value/(1024*1024*1024)),我总是看到实际值的唯一32位 有人知道为什么编译器将其存储为32位吗 编辑: 我的错误是,该值是使用以下计算在C中设置的: partition_size = st.f_bsize*st.f_frsize; struct statvfs { unsigned long int

在ARM交叉编译器中使用类型为
unsigned long-long

该变量表示分区大小(~256GB)。我希望它存储为64位,但在使用
%lld
打印它时,甚至尝试将其打印为兆字节
(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_bsize
f_frsize
只有32位,编译器不会自动将它们转换为64位!Casting为我解决了这个问题。

下面的代码将打印整个64位。请尝试使用
%llu

  main()
    {
    unsigned long long num = 4611111275421987987;
    printf("%llu\n",num);
    }
我的错误。。。。。。。。 使用以下计算在C中设置该值:

分区大小=标准尺寸*标准尺寸

结构statvfs {无符号长整型f_bsize;无符号长整型f_frsize;..}

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


铸造为我解决了这个问题。

你所说的“我总是只看到32位的真实值”是什么意思。如果它不够大,
printf()
默认情况下不会打印超过需要的数字。什么是
printf(“%zu\n”,sizeof(unsigned long-long))打印?我错了!该值计算为:分区大小=空闲块*块大小;空闲块和块大小只有32位,编译器不会自动将它们转换为64位!我应该删除这个问题还是做其他事情?struct statvfs{unsigned long int f_bsize;unsigned long int f_frsize;…}这是c结构,这个问题可能有很多重复项。如果你找到一个好的,并且认为,这个问题可以帮助某人找到那个复制品,这可能是保留它(并将其标记为dup)的原因。否则,我会删除它。