我正在从Java过渡到C,对<code>long</code>数据类型有一些疑问。在Java中,要保存大于2的整数<sup>32<sup>,只需编写<code>长x 。然而,在C语言中,<code>long</code>似乎既是数据类型又是修饰符。
似乎有几种方法可以使用long
:
long x;
long long x;
long int x;
long long int x;
还有,好像还有这样的事情:
long double x;
等等
所有这些不同的数据类型之间有什么区别,它们都有相同的目的吗?
< code>long相当于< code>long int,正如< code>short相当于< code>short int。< code>long int是至少32位的有符号整数类型,而< code>long long或< code>long long int是至少64位的有符号整数类型。
这并不一定意味着长长
比长
。许多平台/ABI使用LP64
模型 - 其中长
(和指针)为64位宽。Win64 使用 LLP64
,其中 long
仍然是 32 位,long
long(和指针)是 64 位宽。
这里对64位数据模型有一个很好的总结。
< code>long double并不能保证至少与< code>double一样宽。
长整型和长整型至少为 32 位。
long-long和long-long-int至少为64位。您必须使用c99编译器或更好的编译器。
长双打有点奇怪。在维基百科上查找它们以获取详细信息。
< code>long和< code>long int是相同的。< code>long long和< code>long long int也是如此。在这两种情况下,< code>int都是可选的。
至于两组之间的差异,C标准要求每组的最小范围,并且long long
至少与long
一样宽。
标准的控制部分(C 11,但它已经存在了很长时间)是3.9.1基本类型
,第2节(后面的部分为无符号整数类型提供了类似的规则):
有五种标准的有符号整数类型:有符号字符、短整型、整型、长整型和长整型。在这个列表中,每种类型提供的存储量至少与列表中它前面的类型一样多。
在 7.1.6.2 Simple 类型说明符
中还有一个表 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
type的说明符。long-long
也是longLong-int
type的说明符。
虽然C标准本身没有规定积分类型的最小范围,但它确实引用了1.2规范性参考
中的C99作为应用。因此,C99 5.2.4.2.1整数类型的大小中规定的最小范围
就<code>长双精度
描述 (Description) C库函数long int labs(long int x)返回long int labs(long int x)的绝对值。 声明 (Declaration) 以下是labs()函数的声明。 long int labs(long int x) 参数 (Parameters) x - 这是整数值。 返回值 (Return Value) 此函数返回x的绝对值。 例子
描述 (Description) java.util.zip.ZipInputStream.skip(long n)方法跳过当前ZIP条目中指定的字节数。 声明 (Declaration) 以下是java.util.zip.ZipInputStream.skip(long n)方法的声明。 public long skip(long n) throws IOException 参数 (Pa
描述 (Description) java.util.zip.InflaterInputStream.skip(long n)方法跳过未压缩数据的指定字节数。 声明 (Declaration) 以下是java.util.zip.InflaterInputStream.skip(long n)方法的声明。 public long skip(long n) throws IOException
描述 (Description) java.util.zip.DeflaterInputStream.skip(long n)方法跳过并丢弃输入流中的数据。 此方法可能会阻塞,直到读取并跳过指定的字节数。 注意:虽然n以long形式给出,但可以跳过的最大字节数是Integer.MAX_VALUE。 声明 (Declaration) 以下是java.util.zip.DeflaterInputStr
描述 (Description) java.util.zip.CheckedInputStream.skip(long n)方法跳过指定的输入字节数。 声明 (Declaration) 以下是java.util.zip.CheckedInputStream.skip(long n)方法的声明。 public long skip(long n) throws IOException 参数 (
问题内容: 有时我看到API正在使用或或或,但我不知道如何做出决定? 我什么时候应该选择什么? 问题答案: 是的形式,是的对象形式。 在采用64位。在使用32位,所以只能容纳人数达到±2十亿(-2 31到2 31 -1)。 您应该使用和,除非需要使用从继承的方法,例如。方法通常使用带框(-wrapped)版本,因为它们需要适用于任何版本,并且基本类型(例如或)不是。 另一个区别是,and 是 按值