2010-03-21 61 views
0

我是C初学者,使用Turbo C++编译器(16位)。长整型问题

在我写的软件中,最大的答案是32000左右。如果我想要一个比这更大的数字,我使用long int

如果我执行下面的程序:

#include <stdio.h> 
void main() 
{ 
    long int x; 
    x=40000; 
    printf("%d", x); 
} 

然后我得到一个错误的常数值在功能main()长。

我怎样才能得到更多的答案32000和摆脱这个错误? 也正常我将%d改为%ld并使用40000L bt当我使用无符号整数,那么我也需要使用40000 //'?'。

+6

为什么使用turbo C++?有许多更好,免费的C和C++编译器,它们将支持32位和更大的整数。 – 2010-03-21 11:37:31

+0

目前m使用它!想要切换到其他人的 ! – Kraken 2010-03-21 11:38:28

+1

我总是说应该有一个turbo-C++标签,它一定会每年出现一次左右。 – 2010-03-21 12:19:52

回答

6

在printf中为long int使用%ld。 %d是int,在你的编译器中只有16位。对于错误消息,请使用x = 40000L。

+0

所以每个tym我需要使用'L'? 即使我使用unsigne长整数? 还是只是长整型? – Kraken 2010-03-21 11:47:31

+0

这是很长的int。对于未签名的longs,使用40000UL。更好的是,使用已经建议的另一个编译器。并了解不同的整数类型,有符号和无符号,保证位数,提升规则以及所有相关的东西,如printf格式说明符。 – Secure 2010-03-21 11:55:35

0

将long更改为无符号,40000将适合unsigned int。

+0

bt长是什么问题? – Kraken 2010-03-21 11:42:57

+0

您指定了“long int x”,并将int的默认大小与“%d”一起指定为16位,这是因为如果您将long的值设置为70000并尝试使用%d打印它会忽略高16位显示4464而不是70000. – 2010-03-21 12:17:25

0

假设你在windows上,最好的解决方案是以32或64位平台为目标。 16位程序甚至不会在64位版本的Windows上运行;你应该真的升级。

微软有一个免费版本的Visual Studio:Visual C++ Express Edition。这也是一个很好的选择,因为它带有一个完整的IDE。

Gcc也可用于Mingw形式的窗口。不幸的是,mingw本身并没有发布随时可用的编译器,但是其他的却可以,比如equation.comTDM

0

或许刷上variadic formatting可能会有所帮助:)当你(或者printf()子系统)实际上扩展到variadic arguments时,它假设你知道它们是什么类型。

这不仅适用于printf,也适用于讨论printf时使用va _ *()或v * printf()的任何其他函数。不要忘记你的类型。

此外,跟踪signedness以避免意外的结果。

换句话说,当你调用printf()或其他任何接受elipsis的东西时,请确定你传递的是什么。这不仅限于printf(),事实上冒险超出了这一点通常不会产生编译器警告。