为什么我不能直接将__int64变量设置为-2500000000?

时间:2011-02-18 20:53:33

标签: c++ windows visual-c++ vc6 int64

该程序是在WindowsXP机器上用VC ++ 6.0编写的。

如果我尝试直接将__int64变量设置为-2500000000,则会将其截断为32位值并采用二进制补码。

__int64 testval;
testval = -2500000000;

此时testval等于1794967293(110 1010 1111 1101 0000 0111 0000 0000二进制)。

当我将变量设置为2500000000然后乘以负数时,它可以工作:

__int64 testval;
testval = 2500000000;
testval *= -1;

变量testval等于-2500000000(1001 0101 0000 0010 1111 1001 0000 0000二进制)。

有什么想法吗? 感谢。

3 个答案:

答案 0 :(得分:10)

获取更新的编译器。 VC6标准的合规性非常差。

在VC6中,尝试后缀i64,如

__int64 toobig = -2500000000i64;

找到the documentation

答案 1 :(得分:9)

编译器将常量2500000000视为32位数。您需要通过在常量的末尾附加long int来明确告诉它将其视为LL。所以,试着改为:

testval = -2500000000LL;

更新:由于您的编译器不支持此操作,并且您遇到VC6,请尝试将其分解为由两个32位数的乘积产生的值,如:

testval = -250000;
testval *= 10000;

答案 2 :(得分:2)

正确的语法是-2500000000LL。如果它不起作用,请使用更新的编译器。