我正在调试一个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下测试
答案 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