我正在从 Java 过渡到 C,并且对long数据类型有一些疑问。在 Java 中,要保存大于 2 32的整数,您只需编写long x;. 但是,在 C 中,它似乎long既是数据类型又是修饰符。
long
long x;
似乎有几种使用方法long:
long x; long long x; long int x; long long int x;
此外,似乎还有以下内容:
long double x;
等等。
所有这些不同的数据类型有什么区别,它们的目的是否相同?
long并且long int是相同的。long long和 也是如此long long int。在这两种情况下,int都是可选的。
long int
long long
long long int
int
至于这两组之间的区别,C++ 标准规定了每组的最小范围, 并且long long至少与. __long
标准的控制部分(C++11,但这已经存在了很长时间)之一,3.9.1 Fundamental types第 2 节(后面的部分给出了无符号整数类型的类似规则):
3.9.1 Fundamental types
有五种标准有符号整数类型:signed char、short int、int、long int 和 long long int。在此列表中,每种类型提供的存储空间至少与列表中它前面的类型一样多。
中还有一个表 9 7.1.6.2 Simple type specifiers,它显示了说明符到实际类型的“映射”(表明int是可选的),其中一部分如下所示:
7.1.6.2 Simple type specifiers
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>因此,适用于中所列的最小范围。
1.2 Normative references
C99 5.2.4.2.1 Sizes of integer types <limits.h>
就 而言long double,这实际上是一个浮点值而不是整数。与整数类型类似,它至少需要具有与 a 一样高的精度,double并提供该类型的值的超集(意味着 至少 是那些值,不一定是 更多 值)。
long double
double