小编典典

C++ 中的“long”、“long long”、“long int”和“long long int”有什么区别?

all

我正在从 Java 过渡到 C,并且对long数据类型有一些疑问。在 Java 中,要保存大于 2 32的整数,您只需编写long x;.
但是,在 C
中,它似乎long既是数据类型又是修饰符。

似乎有几种使用方法long

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

此外,似乎还有以下内容:

long double x;

等等。

所有这些不同的数据类型有什么区别,它们的目的是否相同?


阅读 354

收藏
2022-05-16

共1个答案

小编典典

long并且long int是相同的。long long和 也是如此long long int。在这两种情况下,int都是可选的。

至于这两组之间的区别,C++ 标准规定了每组的最小范围, 并且long long至少与. __long

标准的控制部分(C++11,但这已经存在了很长时间)之一,3.9.1 Fundamental types第 2
节(后面的部分给出了无符号整数类型的类似规则):

有五种标准有符号整数类型:signed char、short int、int、long int 和 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 long作为类型的说明符long long int

尽管 C++ 标准本身并没有指定整数类型的最小范围,但它确实引用了 C99,in 1.2 Normative references,作为应用程序。C99 5.2.4.2.1 Sizes of integer types <limits.h>因此,适用于中所列的最小范围。


就 而言long double,这实际上是一个浮点值而不是整数。与整数类型类似,它至少需要具有与 a
一样高的精度,double并提供该类型的值的超集(意味着 至少 是那些值,不一定是 更多 值)。

2022-05-16