2010-03-10 78 views
5

我正在为我在大学的数学课程的c编程项目工作。 我需要能够处理大于那些可以存储在'long int'数据类型中的大整数。所以,我想用“长长整型”,但如果我尝试这样的事:'long long int'被解释为'long int'。我该如何解决这个问题?

long long int number; 
number = 10000000000; 

然后错误消息说“错误整型常量‘长’式的过大”。

我试过其他数据类型,如'___int64'和'int_64t'我试过包括所有的标准C库,我仍然遇到同样的问题。

奇怪的是,当我尝试'printf("LLONG_MAX = %lld\n", LLONG_MAX);',我得到这个:

LLONG_MAX = -1 

我使用的代码块8.02在Windows XP上,但我不知道安装的是什么版本的GCC编译器,因为我使用校园内的网络计算机,我无权访问主文件系统。我不想每天都将笔记本电脑带入校园。请帮忙!谢谢

回答

1

在微软环境中使用的printf这个语法:

 
    __int64 i64 = 10000000000; 
    unsigned __int64 u64 = 10000000000000000000; 

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

+0

谢谢!它现在工作:) – Eddy 2010-03-10 16:53:37

3

在整数常量的末尾添加一个ll

+0

我试过了。不工作 number = 10000000000ll printf(“number =%lld,number); 给我'number = 141006540​​8' – Eddy 2010-03-10 15:49:30

+0

也许你可能会指定”ll“是小写的”LL“,而不是我的意思与你写的和差的十一(11) [编辑] 如果你知道安装GCC在那里,你可以输入“GCC -v”来获得的版本。 – 2010-03-10 16:04:26

+0

呀遗憾的混乱。我不知道如何让GCC的版本,我使用Windows XP不是Linux这样的命令“海湾合作委员会”在命令提示符下不被认可。除了 – Eddy 2010-03-10 16:10:25

0

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

所以,你应该能够

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

你应该能够使用很长很长int型和gcc编译器,但我认为它可能需要使用C99 STD代码中作为默认可能是C89模式。尝试添加--std = c99到你的编译器命令行,看看是否有帮助:-)

+0

那到pavpanchekha的响应 – PinkyNoBrain 2010-03-10 15:45:59

+0

对不起,我有点福利局的,我不使用命令行我只是在代码块中单击“构建并运行”。我该怎么做? – Eddy 2010-03-10 15:55:48

+0

没问题。因为我使用了代码块,但是我想去“设置”,然后“编译器和调试器”调出相关的窗口。从那里您需要“编译器设置/编译器标志”选项卡,并查找和选择使用C99模式或ISO C90进行c程序。我不确定确切的选项名称。 一半,http://www.codeblocks.org/docs/main_codeblocks_en3.html descibes HTHE编译器选项窗口 – PinkyNoBrain 2010-03-10 16:14:07

0

也许编译器被数据类型的int部分弄糊涂 - 你试过用long long来代替吗?

This website可能会帮助你。

+0

我试过了。我也看了一下这个网站,这让我尝试了'printf(“LLONG_MAX =%lld”LLONG_MAX);'。它给了我LLONG_MAX = -1这是相当奇怪的: – Eddy 2010-03-10 15:59:00

11

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

  • 10是隐式有符号整数
  • 10U,10U是明确的无符号整数
  • 10L,10L是明确地有符号长整数
  • 10ll,10LL或在Win32 10i64是明确地有符号长长整型
  • 10ull是明确为unsigned long long

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

  • 10.0隐式双
  • 10.0f或10.0F是明确的浮动
  • 10.0升或10.0L是明确一个长双
0

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

0

随着人们已经发布,你应该检查你所使用的编译器。 代码:阻止你做(在我的版本,无论如何,希望这会为你工作太):

首先找出编译器选择为您的项目选择 项目 - >构建选项...,看看是什么它在“选定的编译器”中说

然后选择: 设置 - >编译器和调试器...并选择你刚发现的编译器。 然后点击“工具链可执行文件”并查看它对于例如“C编译器”。

也许如果你成功了,和你的结果发表,有人在这里将能够帮助你。