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)
找到了文档!
编译器将常量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)
| 归档时间: |
|
| 查看次数: |
1842 次 |
| 最近记录: |