C#中long和int的区别?

Posted

技术标签:

【中文标题】C#中long和int的区别?【英文标题】:Difference between long and int in C#? 【发布时间】:2010-12-27 11:13:51 【问题描述】:

C# 中 longint 之间的实际区别是什么?我知道在 C/C++ 中,在某些 64 位平台上 long 将是 64 位(当然取决于操作系统),但在 C# 中,它全部在 .NET 运行时中运行,所以有实际区别吗?

另一个问题:int 能否持有long(按演员)而不丢失所有平台上的数据?

【问题讨论】:

除了答案之外,请注意 long 和 int 具有静态 MaxValue 和 MinValue 常量。 我知道这一点,但我不确定这些是否会根据 32 位和 64 位平台而改变。在 google 上搜索只得到了很多 C/C++ 结果。 平台在 .NET 中被抽象出来,因此您始终可以获得一致的运行时(至少对于托管代码而言) 不要将 .net CLR 视为虚拟机。将其视为即时编译器,这更有意义。 .Net 代码在应用程序启动时编译为完全原生的机器代码,然后再运行。 long 和 int 的区别当然是 long。总和也是如此。 :-) 【参考方案1】:

int(运行时中的又名System.Int32)在任何平台上始终是有符号的 32 位整数,long(又名System.Int64)在任何平台上始终是有符号的 64 位整数。所以你不能从一个值高于Int32.MaxValue或低于Int32.MinValuelong进行转换而不丢失数据。

【讨论】:

好的。但是为什么这个页面msdn.microsoft.com/en-us/library/296az74e.aspx 显示与 MAX INT 和 MAX LONG 相同的数字?微软页面出错? 这些是 C++ 类型,而不是 C# 谷歌C# long max value 的第一页是这个页面 - msdn.microsoft.com/en-us/library/296az74e.aspx - 这不适用于 C#。这似乎是 OP 提出这个问题的原因。【参考方案2】:

C# 中的 int=> System.Int32=>从 -2,147,483,648 到 2,147,483,647。

long in C#=> System.Int64 =>从 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807

如果你的 long 数据超出了 int 的范围,并且你使用 Convert.ToInt32 那么它会抛出 OverflowException,如果你使用显式转换那么结果将是意想不到的。

【讨论】:

【参考方案3】:

int 在 .NET 中是 32 位。 long 是 64 位的。这是有保证的。所以,不,int 不能长时间不丢失数据。

有一种类型,其大小会根据您运行的平台而变化,即IntPtr(和 UIntPtr)。这可以是 32 位或 64 位。

【讨论】:

【参考方案4】:

当然有所不同 - 在 C# 中,long 是 64 位有符号整数,int 是 32 位有符号整数,而且永远都是这样。

所以在 C# 中,long 可以容纳 int,但 int 不能容纳 long。

C/C++ 这个问题取决于平台。

【讨论】:

【参考方案5】:

在 C# 中,intSystem.Int32longSystem.Int64;前者是 32 位,后者是 64 位。

相比之下,C++ 仅提供关于 int/long 大小的模糊保证(您可以通过 C++ 标准挖掘确切、血腥的细节)。

【讨论】:

【参考方案6】:

我认为 int 是 32 位整数,而 long 是 64 位整数。

【讨论】:

以上是关于C#中long和int的区别?的主要内容,如果未能解决你的问题,请参考以下文章

C#中long和int的区别?

R语言中numeric 和 integer 的区别

ACM中关于__int64与long long 的区别

Java中long和Long有啥区别

short型与int型的区别

int short long有啥区别?