111*_*001 176 c++ long-integer
我正在从Java过渡到C++,并对long数据类型有一些疑问.在Java中,要保存大于2 32的整数,您只需编写long x;.但是,在C++中,它似乎long既是数据类型又是修饰符.
似乎有几种使用方法long:
long x;
long long x;
long int x;
long long int x;
Run Code Online (Sandbox Code Playgroud)
此外,似乎有一些事情,如:
long double x;
Run Code Online (Sandbox Code Playgroud)
等等.
所有这些不同的数据类型之间有什么区别,它们都有相同的目的吗?
pax*_*blo 161
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
Run Code Online (Sandbox Code Playgroud)
请注意说明符和类型之间的区别.说明符是如何告诉编译器类型是什么,但您可以使用不同的说明符以相同的类型结束.
因此,long就你自己的问题而言,它既不是一个类型也不是一个修饰符,它只是一个long int类型的说明符.同上long long作为该long long int类型的说明符.
虽然C++标准本身没有指定整数类型的最小范围,但它确实引用了C99 1.2 Normative references,作为应用.因此,所述的最小范围C99 5.2.4.2.1 Sizes of integer types <limits.h>是适用的.
就其而言long double,这实际上是浮点值而不是整数.与整数类型类似,它必须具有至少与a一样多的精度,double并提供超过该类型的值的超集(至少意味着那些值,不一定是更多的值).
Eri*_*ert 55
long和long int至少为32位.
long long和long long int至少为64位.您必须使用c99编译器或更好.
长双打有点奇怪.有关详细信息,请在维基百科上查找.
xjc*_*jcl 23
在 Java 中,along始终是 64 位,而在 C++ 中,这取决于计算机体系结构和操作系统。例如,along在 Linux 上是 64 位,在 Windows 上是 32 位(这样做是为了保持向后兼容性,允许 32 位程序在 64 位 Windows 上编译而无需任何更改)。long int是 的同义词long。
后来,long long它被引入表示“这次在 Windows 上真正的长(64 位)”。long long int是这个的同义词。
避免使用、等并改为使用:被认为是良好的 C++ 风格: shortintlong
std::int8_t # exactly 8 bits
std::int16_t # exactly 16 bits
std::int32_t # exactly 32 bits
std::int64_t # exactly 64 bits
std::size_t # can hold all possible object sizes, used for indexing
Run Code Online (Sandbox Code Playgroud)
int*_t您可以通过包含标头来使用这些类型<cstdint>。size_t是在<stdlib.h>.
Bre*_*ale 16
long相当于long int,short等同于short int.A long int是有符号整数类型,至少为 32位,而a long long或long long int有符号整数类型至少为 64位.
这并不一定意味着a long long比a宽long.许多平台/ ABI使用该LP64模型 - 其中long(和指针)是64位宽.Win64使用LLP64,其中long仍为32位,long long(和指针)为64位宽.
有64位数据模型一个很好的总结在这里.
long double不保证除了它至少与a一样宽double.
这看起来令人困惑,因为您将long自己作为数据类型.
long只不过是long int你单独使用时的简写.
long是一个修改,你可以用它double也可以作为long double.
long== long int.
它们都占用4个字节.