6

该程序是在 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 二进制)。

有任何想法吗?谢谢。

4

3 回答 3

10

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

在 VC6 中,尝试使用 的后缀i64,如

__int64 toobig = -2500000000i64;

找到文档

于 2011-02-18T21:05:49.713 回答
9

编译器将常量 2​​500000000 视为 32 位数字。long int您需要通过将 an 附加LL到常量的末尾来明确告诉它将其视为 a 。因此,请尝试:

testval = -2500000000LL;

更新:由于您的编译器不支持这一点,并且您被 VC6 困住,请尝试将其分解为两个 32 位数字乘积的值,如下所示:

testval = -250000;
testval *= 10000;
于 2011-02-18T20:58:40.243 回答
2

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

于 2011-02-18T21:16:25.837 回答