C#中long和int的区别?
Posted
技术标签:
【中文标题】C#中long和int的区别?【英文标题】:Difference between long and int in C#? 【发布时间】:2010-12-27 11:13:51 【问题描述】:C# 中 long
和 int
之间的实际区别是什么?我知道在 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.MinValue
的long
进行转换而不丢失数据。
【讨论】:
好的。但是为什么这个页面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# 中,int
是 System.Int32
,long
是 System.Int64
;前者是 32 位,后者是 64 位。
相比之下,C++ 仅提供关于 int/long 大小的模糊保证(您可以通过 C++ 标准挖掘确切、血腥的细节)。
【讨论】:
【参考方案6】:我认为 int 是 32 位整数,而 long 是 64 位整数。
【讨论】:
以上是关于C#中long和int的区别?的主要内容,如果未能解决你的问题,请参考以下文章