C 64位变量存储为32位
在ARM交叉编译器中使用类型为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
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)的原因。否则,我会删除它。