Is there anything longer than unsigned long long int in C?

时间:2018-06-20 05:02:43

标签: c

I'm using an unsigned long long int to store number of characters in a file. And I'm scared that its range will be bypassed soon. Is therr another datatype which can hold values more than unsigned long long int?

I also need 2 unsigned long long int arrays to store the pointers to certain positions in the file. However the maximum number of elements that I can have in an array is 10000. Is there a way to have a lot more?

3 个答案:

答案 0 :(得分:5)

只需担心文件中的字符数,就不必担心 https://www.google.co.uk/search?q=2%5E64+bytes+in+exabytes

这将提供18艾字节文件的存储空间。

直接回答问题。您应该查看一个需要大于64位数字的库

GMP是我使用过很多次的 https://gmplib.org

作为笔记 1 EB = 1,000,000 TB

答案 1 :(得分:2)

该标准指定的最大标准整数类型为long long int

GCC 4.7.1 manual说:

  

6.8个128位整数

     

作为扩展,整数标量类型__int128支持具有整数的目标   模式宽度足以容纳128位。只需将__int128写入带符号的128位整数,或者   unsigned __int128表示无符号的128位整数。海湾合作委员会不支持表达   类型为__int128的整数常量,用于具有long long整数且小于[ sic ]的目标   128位宽度。

__int128是此类类型之一,它在x86-64上可用,并且受所有主要编译器的支持。如您所料,它的宽度为128位。

答案 2 :(得分:1)

  

我使用的是无符号long long int格式,用于在文件中存储字符数。

当今大多数文件系统还使用64位存储文件大小(例如,使用ext2,它是i_size + i_dir_acl,两个32位整数)。

具有64位,最大文件大小为18艾字节,这非常大。