c++ - 在 C++ 中,"long","long long","long int" 和"long long int" 之间的差异?

我正在从java转换到C ,对"long"数据类型有一些问题,在java中,要保存大于2^32的整数,只需编写"long x ;",但是,在C++中,long似乎既是数据类型,也是修饰符。

似乎有多种使用长方法的方法:


long x;
long long x;
long int x;
long long int x;

此外,似乎还有一些东西

 
long double x;

 

依次类推。

这些数据类型的区别是什么,它们都有相同的用途?

时间:

longlong int相同,long longlong long int也是,在这两种情况下,int都是可选的。

对于两个集之间的差异,C++标准要求每个集合的最小范围,long long至少与long一样宽。

标准(C++11,但是,已经出现了很长时间了)的控制部分包括3.9.1 Fundamental types,节2(后面的部分为未签名的整型类型提供类似的规则):

有五个标准的有符号整数类型: signed char ,short int ,int ,long int ,and long long int . 在此列表中,每个类型至少提供与列表前面的存储类型相同的存储量。

还有一个表9 7.1.6.2 Simple type specifiers 显示了实际类型(显示int是可选)的说明符的"映射",如下所示:


Specifier(s) Type
------------- -------------
long long int long long int
long long long long int
long int long int
long long int

请注意说明符和类型之间的区别,说明符是如何告诉编译器类型的,但是,你可以使用不同的说明符来结束同一类型。

因此long本身不是一个类型,也不是作为你的问题假设的修饰符,它只是long int类型的一个说明符,long longlong long int类型的说明符。

尽管C++标准本身并没有指定整型类型的最小范围,但是,它在1.2 Normative references中引用了c,因此,最小范围是在 C99 5.2.4.2.1 Sizes of integer types <limits.h> 适用。


long double中,这实际上是浮点值,而不是整数,类似于整型类型,必须至少具有与double相同的精度,并提供超过(至少意味着那些值,不一定是更多的值)类型的值的超集。

longlong int等效,就像short等价于short int一样,一个long int是一个有符号的整型,它至少是32位,而且long long或long long int是64位有符号整型的。

这并不一定意味着long longlong宽,许多平台/ABI使用LP64模型- long (和指针)是64位宽,win64使用LLP64,其中long仍为32位,long long (和指针)为64位。

64-bit数据模型有很好的总结这里

long double不能保证它至少与double一样宽。

...