使用C ++和VS2008管理整数时的错误?

时间:2013-03-13 19:26:49

标签: c++ visual-studio-2008-sp1

我正在调试一个C ++程序,我发现由于某些原因,在我的visual studio 2008版本中,有些数字似乎没有正确存储。例如,数字-3254535440似乎存储为1040431856.这些数字足够小,可以存储到很长的长,所以应该没有问题。如果我运行以下代码,则会显示两条错误消息。我试过两台不同的机器。任何的想法?谢谢!

if (-3254535440 == 1040431856)
    printf("ERROR\n");

long long j = -3254535440;
if (j == 1040431856)
    printf("ERROR2\n");

在Microsoft Visual Studio 2008版本9.0.30729.1 SP下测试

2 个答案:

答案 0 :(得分:4)

文字仍为int。你需要把它们做成更大的类型:

long long j = -3254535440LL;

这不适合32位类型(看起来你的int是),但一旦表示为long long,它就会保留其值。

答案 1 :(得分:2)

使用更高的警告级别进行编译,您将收到警告:

#include <stdio.h>

int main()
{
    long long j = -3254535440;
    printf("%lld\n",j);
}

编译器:

c:\>cl /nologo /W4 test.cpp
test.cpp
test.cpp(5) : warning C4146: unary minus operator applied to unsigned type, result still unsigned

c:\>test
1040431856

正如其他人所提到的那样,声明一个很长的文字:

#include <stdio.h>

int main()
{
    long long j = -3254535440LL;
    printf("%lld\n",j);
}

结果:

c:\>cl /nologo /W4 test.cpp
test.cpp

c:\>test
-3254535440