该程序是在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二进制)。
有什么想法吗? 感谢。
答案 0 :(得分:10)
答案 1 :(得分:9)
编译器将常量2500000000视为32位数。您需要通过在常量的末尾附加long int
来明确告诉它将其视为LL
。所以,试着改为:
testval = -2500000000LL;
更新:由于您的编译器不支持此操作,并且您遇到VC6,请尝试将其分解为由两个32位数的乘积产生的值,如:
testval = -250000;
testval *= 10000;
答案 2 :(得分:2)
正确的语法是-2500000000LL。如果它不起作用,请使用更新的编译器。