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

发布于 2024-10-18 03:22:49 字数 468 浏览 9 评论 0 原文

本程序是在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 二进制)。

有什么想法吗? 谢谢。

This program is written in VC++ 6.0 on a WindowsXP machine.

If I try to set an __int64 variable to -2500000000 directly, it is truncated to a 32bit value and the two's complement is taken.

__int64 testval;
testval = -2500000000;

At this point testval equals 1794967293 (110 1010 1111 1101 0000 0111 0000 0000 binary).

When I set the variable to 2500000000 and then multiply by negative one, it works:

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

The variable testval equals -2500000000 (1001 0101 0000 0010 1111 1001 0000 0000 binary).

Any ideas?
Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

苦妄 2024-10-25 03:22:49

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

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

__int64 toobig = -2500000000i64;

Found 文档

Get a newer compiler. VC6 standard compliance is VERY poor.

In VC6, try a suffix of i64, as in

__int64 toobig = -2500000000i64;

Found the documentation!

念﹏祤嫣 2024-10-25 03:22:49

编译器将常量 2​​500000000 视为 32 位数字。您需要通过在常量末尾附加 LL 来显式告诉它将其视为 long int。因此,尝试改为:

testval = -2500000000LL;

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

testval = -250000;
testval *= 10000;

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 an LL to the end of the constant. So, try instead:

testval = -2500000000LL;

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:

testval = -250000;
testval *= 10000;
谁与争疯 2024-10-25 03:22:49

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

The correct syntax is -2500000000LL. If it doesn't work, get a newer compiler.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文