'long long int'被解释为'long int'。我怎么绕这个?

时间:2010-03-10 15:38:34

标签: c++ c integer

我正在从事涉及大学数学课程c编程的项目。 我需要能够处理大整数,大于那些可以存储在'long int'数据类型中的整数。所以我尝试使用'long long int',但是如果我尝试这样的话:

long long int number;
number = 10000000000;

然后错误消息显示'错误:整数常量对于“long”类型'来说太大了。

我尝试了其他数据类型,例如'___int64'和'int_64t'我尝试过包含所有标准c库,但我仍然遇到同样的问题。

奇怪的是,当我尝试'printf("LLONG_MAX = %lld\n", LLONG_MAX);'时,我明白了:

LLONG_MAX = -1

我在windows xp上使用Codeblocks 8.02,但是我不确定安装了什么版本的gcc编译器,因为我在校园里使用网络计算机并且我没有访问主文件系统的权限。我不想每天都把笔记本电脑带到校园里。请帮忙!感谢

8 个答案:

答案 0 :(得分:11)

当编译器正在编译C文件并遇到整数或浮点常量时,需要为其分配一个类型。它将隐式为您选择默认类型。您可以通过为编译器提供整数后缀来显式设置类型。整数后缀可以告诉编译器它是否很长, 长或无符号类型。

  • 10隐含有符号整数
  • 10u,10U显式为无符号整数
  • 10l,10L明确是带符号的长整数
  • win32上的10ll,10LL或10i64显式为带符号的长整数
  • 10ull显然是无符号长long

浮点类型也有这种情况。类型可以是float,double 或者是一个长双。浮点类型通常默认为double。

  • 10.0隐式为双重
  • 10.0f或10.0F显式为浮动
  • 10.0l或10.0L显然是一个长双

答案 1 :(得分:3)

在整数常量的末尾添加ll

答案 2 :(得分:1)

在Microsoft环境中,使用具有以下语法的printf:

    __int64 i64 = 10000000000;
    unsigned __int64 u64 = 10000000000000000000;

    printf ( "%I64d\n", i64 );
    printf ( "%I64u\n", u64 );
    printf ( "%I64d\n", u64 ); <-- note this typo

答案 3 :(得分:0)

嗯,Code :: Blocks使用GCC作为其常用的编译器。最新版本明确支持64位类型。

所以你应该能够

#include <inttypes.h>
uint64_t unsigned64BitNumber;
int64_t signed64BitNumber;

答案 4 :(得分:0)

你应该可以在gcc编译器中使用long long int,但我认为它可能需要使用c99 std代码,因为你的默认值可能是c89模式。尝试将--std = c99添加到编译器命令行,看看是否有帮助: - )

答案 5 :(得分:0)

也许编译器对数据类型的int部分感到困惑 - 您是否尝试使用long long

This website可能会帮助你。

答案 6 :(得分:0)

除了之前关于后缀和gcc C99模式的评论,如果你不能长时间工作,并且你只需要最多2 ^ 52的整数,你就可以使用double来逃避。假设IEEE双精度格式(0 +1偏差指数),最多2 ^ 52的整数应该精确表示为double。

答案 7 :(得分:0)

正如人们已经发布的那样,您应该检查您正在使用的编译器。 在代码:你做的块(无论如何,我的版本,希望它也适合你):

首先通过选择找出为项目选择的编译器  项目 - &gt;构建选项......并在“选定的编译器”

中查看它的内容

然后选择:  设置 - &gt;编译器和调试器...并选择刚刚找到的编译器。  然后单击“工具链可执行文件”并查看其中的内容,例如“C编译器”。

也许如果您成功并发布结果,此处有人可以帮助您。