什么';这是';长';用于的数据类型? 我已经用C++编程了相当长的一段时间,现在我对大多数的东西都很熟悉。但有一件事我一直不明白,“long”数据类型

什么';这是';长';用于的数据类型? 我已经用C++编程了相当长的一段时间,现在我对大多数的东西都很熟悉。但有一件事我一直不明白,“long”数据类型,c++,types,long-integer,C++,Types,Long Integer,我用谷歌搜索了一下,但我还是不知道它是干什么用的。我发现一些页面说它与int大小相同,范围相同。那么使用它有什么意义呢 我在这里发现了另一个与此相关的堆栈溢出问题: 这两者之间的唯一区别似乎是,有时不同系统的大小不同。这是否意味着在64位机器上使用long的应用程序在32位机器上无法工作?如果是这样的话,不使用它们不是更好吗 我还注意到一些叫做“longint”甚至“longlong”的东西!它是数据类型还是修饰符?它依赖于编译器。我的标准有点生疏,但我相信它的定义如下: char <=

我用谷歌搜索了一下,但我还是不知道它是干什么用的。我发现一些页面说它与int大小相同,范围相同。那么使用它有什么意义呢

我在这里发现了另一个与此相关的堆栈溢出问题:

这两者之间的唯一区别似乎是,有时不同系统的大小不同。这是否意味着在64位机器上使用long的应用程序在32位机器上无法工作?如果是这样的话,不使用它们不是更好吗


我还注意到一些叫做“longint”甚至“longlong”的东西!它是数据类型还是修饰符?

它依赖于编译器。我的标准有点生疏,但我相信它的定义如下:

char <= short <= int <= long <= long long
这意味着拥有
char=short=int=long=long-long=64位是完全有效的,事实上一些DSP的编译器就是这样设计的



这突出了实际阅读编译器文档的重要性,从您链接的问题中的一个答案中阅读:

long必须至少与int的大小相同,并且可能(但不一定)更长


我想不出更好的解释方法了。

long
保证(至少)32位
int
仅保证(至少)16位。在16位和8位系统上,
以效率为代价提供了范围

干杯

我注意到一些叫做“long int”甚至“long long”的东西!它是数据类型还是修改器

long int
long
相同(正如
short int
short
相同)

long-long
是一种独特的数据类型,由一些编译器引入,并被C++0x采用

请注意,没有
long-long


这就是C++03标准所说的(3.9.1/2):

有四种带符号整数类型: “符号字符”、“短整数”、“整数”和 “long int.”在此列表中,每种类型 提供的存储空间至少与 列表中位于它前面的那些


所以:
sizeof(char)如果您想要一个保证为32位或64位的整数,有这样的类型,例如int64\t。如果您确实想确保int的大小,请使用这些类型,而不是long、long-long等。您需要为这些类型(C中的stdint.h)包含
cstdint

我在谷歌上搜索了一下,但我还是不知道 这是干什么用的。我找到了 说它是同样的尺寸,有同样的尺寸 以整数表示的范围。那么 使用它有什么意义

并得出结论认为,
long
现在是无用的

在64位系统兴起之前,C整数类型的事实标准是:

  • char
    =(
    u
    int8\u t
    (请注意,C早于Unicode。)
  • short
    =
    int16\u t
  • int
    =
    intptr\u t
    [直到64位],
    int\u fast16\u t
  • long
    =
    int32\u t
    [直到64位],
    intmax\u t
    [直到1999年]
  • long-long
    =
    int64\u t
    intmax\u t

<>今天,<>代码>长< /Cord>没有一致的语义。< /P>我喜欢C++,但是…“long long”作为数据类型非常有趣。我通常使用它来存储货币值,例如long myMoney;//是的,我的钱looonnnnggg@Tabber33long是下一个标准afaik@turd:正确--这就是为什么我的句子是用现在时态而不是将来时态写的。新的关键词会是“非常”吗?真的吗?这些保证在哪里?@ TabBe33:在C++标准中引用的C++标准。H.T.,C++标准是指C标准吗?哪种C标准?这对我来说是个新闻。。。我已经阅读了C++ 03标准,我从来没有引用过C标准(我没有)。@ TabBi33:当前的C++标准是C++ 98,技术更正1的错误更正,被称为C++ 03。由于1998的值在1999之前,您可以很容易地推断出当前的C++标准不引用C99。因此,它指的是@ TabBe33:C++ 03×3.9,脚注37说,“意图是C++的内存模型与ISO/IEC 9899编程语言C兼容。”这意味着所有关于POD类型的语句都有在C89中的基础。本定义还参考§3.9.1脚注39中的
。我没有C89的副本,但C99§5.2.4.2.1规定
long
必须至少能够保存32位整数。因此,
long
保证至少为32位。QED.@Anon:你能举出标准中哪里有这样的规定吗?我在现实生活中见过编译器,其中char是32位和64位。也许这只是C而不是C++。以位为单位的
char
大小由
中的
char\u-BIT
给出。它必须>=8。几乎,
sizeof(char)==1
,但
char\u位可以是任意数字。唯一的要求是保存平台的整个基本字符集。@pst:我相信
long
int
的一个修饰符,它意味着
int
,因此
int
关键字是可选的。有些人喜欢在这里澄清我们处理的是整数,而不是浮点数。@Let_Me_Be:这是一个错误的更正<代码>字符位
必须大于等于8。为了能够表示所需的数字范围(来自C标准)。遗憾的是,使用
int64\t
等类型不足以确保代码的可移植性。给定
uint16\u t ffff16=0xFFFF;int64_t whowknows=ffffff16*ffff16int
为16 bi的机器上,需要code>生成1
char      >= 8 bits
short     >= 16 bits
int       >= 16 bits
long      >= 32 bits
long long >= 64 bits
error: 'long long long' is too long for GCC