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

问题描述 投票:155回答:5

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

似乎有几种方法可以使用long

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

此外,似乎有一些事情,如:

long double x;

等等。

所有这些不同的数据类型之间有什么区别,它们都有相同的目的吗?

c++ long-integer
5个回答
149
投票

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和long long int。在此列表中,每种类型至少提供与列表中前面的存储一样多的存储空间。

7.1.6.2 Simple type specifiers中还有一个表9,它显示了说明符与实际类型的“映射”(显示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中的C99作为应用。因此,C99 5.2.4.2.1 Sizes of integer types <limits.h>中规定的最小范围是适用的。


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


50
投票

long和long int至少为32位。

long long和long long int至少为64位。您必须使用c99编译器或更好。

长双打有点奇怪。 Look them up on Wikipedia for details.


13
投票

long相当于long int,正如short相当于short intlong int是有符号整数类型,至少为32位,而long longlong long int是有符号整数类型,至少为64位。

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

有一个64位数据模型here的很好的总结。

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


7
投票

这看起来令人困惑,因为您将long作为数据类型本身。

long只是long int的简写,当你单独使用它时。

long是一个修饰符,你可以将它与double一起用作long double

long == long int

它们都占用4个字节。


3
投票

从历史上看,在早期的C时代,当处理器具有8或16位字长时,int与今天的short(16位)相同。从某种意义上说,int是比charshortlongorlong long更抽象的数据类型,因为你无法确定位宽。

当定义int n;you可以翻译这个“给我这个机器上的位宽和速度的最佳折衷n”。也许在未来你应该期望编译器翻译intto是64位。因此,当您希望变量具有32位而不是更多时,最好使用explicitlongas数据类型。

[编辑:#include <stdint.h>似乎是使用int ## _ t类型确保位宽的正确方法,尽管它还不是标准的一部分。

© www.soinside.com 2019 - 2024. All rights reserved.