long long和long有什么区别?他们都不能使用12位数字(600851475143),我忘记了什么吗?
#include <iostream>
using namespace std;
int main(){
long long a = 600851475143;
}
答案 0 :(得分:44)
在主要的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_t
和uint8_t
int16_t
和uint16_t
int32_t
和uint32_t
int64_t
和uint64_t
您可能也对#include <stddef.h>
(或<cstddef>
)感兴趣:
size_t
ptrdiff_t
答案 1 :(得分:7)
long long
在C ++ 98 / C ++ 03中不存在,但确实存在于C99和c ++ 0x中。
long
保证至少32位。
long long
保证至少64位。
答案 2 :(得分:2)
详细说明@ ildjarn的评论:
他们都不能使用12位数字(600851475143),我忘记了什么吗?
编译器查看文字值600851475143
,而不考虑您要将其分配给/初始化的变量。您已将其编写为int
类型的文字,但它不适合int
。
使用600851475143LL
获取long long
类型的文字。
答案 3 :(得分:0)
您的C ++编译器支持long long,在C99标准中保证至少为64位(这是C标准,而不是C ++标准)。请参阅Visual C ++头文件以获取系统上的范围。
建议
对于新程序,建议只使用bool,char,int和double,直到出现需要其他类型之一的情况。
答案 4 :(得分:0)
取决于你的编译器。长是64位,应该处理12位数。看起来像你的情况只是考虑它很长,因此不处理12位数。