当前位置: 首页 > 知识库问答 >
问题:

C语言中的“long”、“long-long”、“long-int”和“long-long-int”之间有什么区别?

孙言
2023-03-14

我正在从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;

等等

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

共有3个答案

严承允
2023-03-14
匿名用户

< 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一样宽。

轩辕成天
2023-03-14

长整型和长整型至少为 32 位。

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

长双打有点奇怪。在维基百科上查找它们以获取详细信息。

羊舌富
2023-03-14

< 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 inttype的说明符。long-long也是longLong-inttype的说明符。

虽然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 是 按值