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

E.F*_*tas 6 c++ windows visual-c++-6 int64 visual-c++

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

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

__int64 testval;
testval = -2500000000;
Run Code Online (Sandbox Code Playgroud)

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

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

__int64 testval;
testval = 2500000000;
testval *= -1;
Run Code Online (Sandbox Code Playgroud)

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

有任何想法吗?谢谢.

Ben*_*igt 10

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

在VC6中,尝试后缀i64,如

__int64 toobig = -2500000000i64;
Run Code Online (Sandbox Code Playgroud)

找到了文档!


and*_*and 9

编译器将常量2500000000视为32位数.你需要明确告诉它将它作为一个long int附加LL到常量的末尾.所以,试着改为:

testval = -2500000000LL;
Run Code Online (Sandbox Code Playgroud)

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

testval = -250000;
testval *= 10000;
Run Code Online (Sandbox Code Playgroud)

  • 考虑到90年代后期发布的Visual C++ 6,C++ 03可能不会有太大帮助. (2认同)