为什么我的 .net Int64 的行为就像 Int32 一样?

发布于 2024-07-19 20:19:20 字数 523 浏览 17 评论 0原文

我在 .net 程序中目睹了一种奇怪的行为:

Console.WriteLine(Int64.MaxValue.ToString());
// displays 9223372036854775807, which is 2^63-1, as expected

Int64 a = 256*256*256*127; // ok

Int64 a = 256*256*256*128; // compile time error : 
//"The operation overflows at compile time in checked mode"
// If i do this at runtime, I get some negative values, so the overflow indeed happens.

为什么我的 Int64 的行为就好像它们是 Int32 的一样,尽管 Int64.MaxValue 似乎确认它们正在使用 64 位?

如果相关的话,我使用的是 32 位操作系统,并且目标平台设置为“任何 CPU”

I'm witnessing a strange behavior in a .net program :

Console.WriteLine(Int64.MaxValue.ToString());
// displays 9223372036854775807, which is 2^63-1, as expected

Int64 a = 256*256*256*127; // ok

Int64 a = 256*256*256*128; // compile time error : 
//"The operation overflows at compile time in checked mode"
// If i do this at runtime, I get some negative values, so the overflow indeed happens.

Why do my Int64's behaves as if they were Int32's, although Int64.MaxValue seems to confirm they're using 64 bits ?

If it's relevant, I'm using a 32 bit OS, and the target platform is set to "Any CPU"

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

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

发布评论

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

评论(2

老子叫无熙 2024-07-26 20:19:20

您的 RHS 仅使用 Int32 值,因此整个操作是使用 Int32 算术执行的,然后是 Int32 结果晋升为长。

改成这样:

Int64 a = 256*256*256*128L;

一切都会好起来的。

Your RHS is only using Int32 values, so the whole operation is performed using Int32 arithmetic, then the Int32 result is promoted to a long.

Change it to this:

Int64 a = 256*256*256*128L;

and all will be well.

埖埖迣鎅 2024-07-26 20:19:20

使用:

Int64 a = 256L*256L*256L*128L;

L 后缀表示 Int64 字面量,无后缀表示 Int32。

你写的:

Int64 a = 256*256*256*128

意思是:

Int64 a = (Int32)256*(Int32)256*(Int32)256*(Int32)128;

Use:

Int64 a = 256L*256L*256L*128L;

the L suffix means Int64 literal, no suffix means Int32.

What your wrote:

Int64 a = 256*256*256*128

means:

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