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