我正在从事涉及大学数学课程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编译器,因为我在校园里使用网络计算机并且我没有访问主文件系统的权限。我不想每天都把笔记本电脑带到校园里。请帮忙!感谢
答案 0 :(得分:11)
当编译器正在编译C文件并遇到整数或浮点常量时,需要为其分配一个类型。它将隐式为您选择默认类型。您可以通过为编译器提供整数后缀来显式设置类型。整数后缀可以告诉编译器它是否很长, 长或无符号类型。
浮点类型也有这种情况。类型可以是float,double 或者是一个长双。浮点类型通常默认为double。
答案 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编译器”。
也许如果您成功并发布结果,此处有人可以帮助您。