您可能更愿意通过<cstdint>及其typedefx 1 m1n1x和uintmax_tMap到编译体系结构上最大的(完全实现的)类型,从而避免担心原语名称。 我很惊讶没有其他人这样说,但是粗略的研究表明它是在C++11中添加的,这可能可以解释为什么以前没有提到它(尽管它的新原语/内置类型long long * 被 * 引用了!) 一些编译器也可能提供更大的类型,尽管这些类型可能带有 * 警告 *,例如:Why in g++ std::intmax_t is not a __int128_t? 就我个人而言,我使用cstdint是因为它更容易快速查看我使用的最小字节数-而不是必须记住给定原语对应的位数-并且标准意味着它避免了我的类型依赖于平台。另外,对于我所做的,uint8_t比无尽的unsigned char更快更整洁!
edit:事后看来,我想澄清一下:uint8_t并不保证等价于unsigned char。当然,在我的机器上是这样的,并且可能对您也是这样。但是标准并不要求这种等价性;参见:When is uint8_t ≠ unsigned char?由于这个原因,现在当我需要[[un]signed] char的标准定义的特殊能力时,我只使用它。
9条答案
按热度按时间92dk7w1h1#
最大的标准C整数类型是
long
。C有一个
long long
,C0x也会添加它,当然你可以实现你自己的自定义整数类型,甚至可能是一个BigInt类。但从技术上讲,考虑到内置的整数类型,
long
是您的答案。kyvafyod2#
long long
数据类型是标准C99和C0x中最大的内置整型数据类型。就像所有其他整型数据类型一样,long long
没有给出确切的字节大小。相反,它被定义为至少一个64位整数。虽然long long
不是官方C标准的一部分,然而,注意,许多用于现代桌面的编译器将long
和long long
都定义为精确的64位,而用于嵌入式处理器的许多编译器将long
定义为32位,将long long
定义为64位(显然有少数例外)。如果您需要更高的精度,或者绝对不能使用
long long
扩展,则必须使用C或C++库中的一个,这些库设计用于处理非常大或非常小的数字。6za6bjd03#
您可能更愿意通过
<cstdint>
及其typedefx 1 m1n1x和uintmax_t
Map到编译体系结构上最大的(完全实现的)类型,从而避免担心原语名称。我很惊讶没有其他人这样说,但是粗略的研究表明它是在C++11中添加的,这可能可以解释为什么以前没有提到它(尽管它的新原语/内置类型
long long
* 被 * 引用了!)一些编译器也可能提供更大的类型,尽管这些类型可能带有 * 警告 *,例如:Why in g++ std::intmax_t is not a __int128_t?
就我个人而言,我使用
cstdint
是因为它更容易快速查看我使用的最小字节数-而不是必须记住给定原语对应的位数-并且标准意味着它避免了我的类型依赖于平台。另外,对于我所做的,uint8_t
比无尽的unsigned char
更快更整洁!edit:事后看来,我想澄清一下:
uint8_t
并不保证等价于unsigned char
。当然,在我的机器上是这样的,并且可能对您也是这样。但是标准并不要求这种等价性;参见:When is uint8_t ≠ unsigned char?由于这个原因,现在当我需要[[un]signed] char
的标准定义的特殊能力时,我只使用它。qxsslcnc4#
在支持SSE的编译器上,xmmintrin. h中定义了128位压缩整数与浮点格式,以便能够使用SSE寄存器与指令。当然,它们不是C标准的一部分,但由于MSVC、GCC与“英特尔C编译器”都支持它们,因此在一定程度上提供了跨平台支持(至少OS X、Linux和Windows用于Intel CPU)。其它ISA具有SIMD扩展,因此可能存在其它平台/编译器特定的扩展,其支持128或256位SIMD指令。Intel即将到来的AVX指令集将具有256位寄存器,因此我们应该看到一组新的数据类型和intrinsic。
它们的行为不太像内置数据类型(即,必须使用内部函数而不是运算符来操作它们,而且它们使用SIMD操作),但由于它们实际上Map到硬件上的128位寄存器,因此值得一提。
Details about Streaming SIMD Extension (SSE)Intrinsics
6ovsh4lw5#
boost::multiprecision::cpp_int
是一个任意精度的整数类型,因此C中没有“最大整数数据类型”,只有一个最大的内置整数类型,在标准C中AFAIK是long
。wyyhbhjk6#
通过定义自己的类,你可以很容易地得到更大的数据类型。你可以从Java中的类BigInteger得到启发。它是一个很好的类,但它不一定是一个真正的整数,即使它的行为完全像整数。
oprakyz77#
在Borland和Microsoft编译器中,__int64可能是您能得到的最大值。
pkwftd7m8#
__int128_t和__uint128_t(unsigned __int128_t)数据类型的长度为128位,是long long的两倍(对于c++新手来说,它的长度是64位)然而,如果你打算使用它们,那么你需要做一些重载,因为int 128数据类型没有得到太多的支持(至少在Mingw中)。这是一个如何使用它来显示2^x-1直到2^128-1的示例
int 128数据类型的问题在于并非所有编译器都支持它。
5rgfhyps9#
Repl.it 说
unsigned long long int
实际上是一个有效的类型,我发现这很有趣。