2011-06-24 42 views
18

长期和长期有什么区别?而且他们都不能使用12位数字(600851475143),我忘记了什么?长长期和长期有什么区别

#include <iostream> 
using namespace std; 

int main(){ 
    long long a = 600851475143; 
} 
+12

让那个'长长的a = 600851475143LL;'它应该可以工作。 – ildjarn

+9

long long和long之间的区别很长。 –

回答

32

在主要32位平台:

  • int为32位
  • long为32个比特以及
  • long long是64位

在主要64位平台:

  • int为32位
  • long或者是32或64位
  • long long为64位以及

由标准状况:

  • int必须至少16位
  • long必须至少有32位
  • long long必须至少有64位

纠正我,如果我错了。

如果你需要一个特定的整数尺寸为特定的应用,而不是信任编译器来选择你需要的大小,#include <stdint.h>(或<cstdint>),所以你可以使用这些类型:

  • int8_tuint8_t
  • int16_tuint16_t
  • int32_tuint32_t
  • int64_tuint64_t

您还可能有兴趣在#include <stddef.h>(或<cstddef>):

  • size_t
  • ptrdiff_t
+0

“long是32位还是64位”是什么意思?它可以改变它的位? –

+2

@岩崎岩崎:这取决于目标。例如,如果你在Windows上编译,它可能是32位,而在Linux x86-64上,它可能是64位。运行时类型不会更改大小。 –

7

long long不C++ 98/C++ 03存在,但在C99确实存在和的C++ 0x。

long保证至少32位。

long long保证至少64位。

0

您的C++编译器支持很长的长度,保证在C99标准(这是C标准,而不是C++标准)中至少有64位。请参阅Visual C++头文件以获取系统上的范围。

建议

对于新方案,建议使用一个只布尔,焦炭,int和双,直到情况发生,其他类型中的一种需要。

http://www.somacon.com/p111.php

0

取决于你compiler.long长为64位,应该处理12位数字。看起来就像在你的情况下,它只是考虑它很长,因此不处理12位数字。

2

为了详细说明@ ildjarn的评论:

,他们都不会用12位数字(600851475143),我是不是忘了什么工作?

编译器看字面意义600851475143不考虑,你将其分配给/与初始化它的变量。你已经将它写成了int类型文字,并且它不适合int

使用600851475143LL得到一个long long类型文字。