这个程序是用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。 如果不起作用,请更新一个编译器。