long long和long int之间有什么区别

时间:2011-08-11 13:56:03

标签: c++ c linux type-conversion

我知道long和int之间的区别 但是“long long”和“long int”之间有什么区别

8 个答案:

答案 0 :(得分:25)

内置类型有几个简介。

  • short是(signedshort int
  • long是(signedlong int
  • long long是(signedlong long int

在许多系统上,short为16位,long为32位,long long为64位。但是,请记住,标准只需要

sizeof(char) == 1
sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)

这样做的结果是,在异域系统上,sizeof(long long) == 1是可能的。

答案 1 :(得分:10)

根据C标准,定义整数类型以提供至少以下范围:

int                     -32767 to               +32767 representable in 16 bits
long               -2147483647 to          +2147483647 representable in 32 bits
long long -9223372036854775807 to +9223372036854775807 representable in 64 bits

每个都可以表示为支持更广泛的范围。在常见的32位系统上intlong具有相同的32位表示。

请注意,负边界与其正对应边对称,以允许符号和幅度表示:C语言标准强加两个补码。

答案 2 :(得分:4)

long long可能比long int更重要。例如,在x86 32位long long将是64位类型而不是long int的32位。

答案 3 :(得分:3)

在64位系统上,它们的大小没有任何差别。在32位系统上,long long保证存储值为64位范围。

为了避免所有这些混淆,最好使用标准整数类型:(u)int16_t, (u)int32_t and (u)int64_t通过stdint.h提供透明度。

答案 4 :(得分:2)

16位系统上的int为16位。引用“long”作为32位整数,但在32位系统上longint表示相同的事情(均为32位)。因此在32位和64位系统上,long longlong int都是64位。例外是64位UNIX,其中long是64位。

有关更详细的表格,请参阅the integer Wikipedia article

答案 5 :(得分:1)

除了类型需要能够表示的最小值范围之外,C标准不对积分类型做出任何特定的宽度要求,并且宽度不减小:short <= int <= long int <= long long int(类似于无符号类型)。顺便提一下,long long只是C99和C ++ 0x标准的一部分。可以在this Wikipedia article中找到所需的最小范围。

答案 6 :(得分:0)

long int是long的同义词。 long long intlong long的同义词。

您在标准C ++中唯一的保证是long long至少与long一样大,但可以更长。这在标准n3242的最新公开草案中的§3.9.1.2中有详细说明。

答案 7 :(得分:0)

“long”将分配给数据类型的位数加倍。 那么长(32位?)变成64位。 Int(16位?)变为32位。