为什么我不能直接将__int64variables设置为-2500000000?

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

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

__int64 testval; testval = -2500000000; 

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

当我将variables设置为2500000000,然后乘以负数,它的工作原理:

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

variablestestval等于-2500000000(二进制1001 0101 0000 0010 1111 1001 0000 0000)。

有任何想法吗? 谢谢。

得到一个更新的编译器。 VC6标准符合性非常差。

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

 __int64 toobig = -2500000000i64; 

找到了文档 !

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

 testval = -2500000000LL; 

更新 :由于你的编译器不支持这一点,并且你坚持使用VC6,所以试着把它分成一个由两个32位数的乘积产生的值,如下所示:

 testval = -250000; testval *= 10000; 

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