为什么我不能直接将 __int64 变量设置为 -2500000000?
本程序是在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 二进制)。
有什么想法吗? 谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
获取更新的编译器。 VC6 标准合规性非常差。
在 VC6 中,尝试使用
i64
后缀,如Found 文档!
Get a newer compiler. VC6 standard compliance is VERY poor.
In VC6, try a suffix of
i64
, as inFound the documentation!
编译器将常量 2500000000 视为 32 位数字。您需要通过在常量末尾附加
LL
来显式告诉它将其视为long int
。因此,尝试改为:更新:由于您的编译器不支持此功能,并且您仍使用 VC6,请尝试将其分解为两个 32 位数字的乘积所产生的值,如下所示:
The compiler is treating the constant 2500000000 as a 32-bit number. You need to explicitly tell it to treat it as a
long int
by appending anLL
to the end of the constant. So, try instead:Update: Since your compiler doesn't support this, and you are stuck with VC6, try instead breaking it into a value that results from the product of two 32 bit numbers as in:
正确的语法是-2500000000LL。如果不起作用,请获取更新的编译器。
The correct syntax is -2500000000LL. If it doesn't work, get a newer compiler.