什么是在C#中long
和int
之间的实际区别? 我了解在 C/C++ 中,长整型long
在某些 64 位平台上会是 64 位(当然取决于操作系统),但在 C# 中,它都在 .NET 运行时中运行,所以是否存在实际区别呢?
另一个问题:在所有平台上,int
能否通过强制类型转换来保存 long
数据而不丢失数据?
什么是在C#中long
和int
之间的实际区别? 我了解在 C/C++ 中,长整型long
在某些 64 位平台上会是 64 位(当然取决于操作系统),但在 C# 中,它都在 .NET 运行时中运行,所以是否存在实际区别呢?
另一个问题:在所有平台上,int
能否通过强制类型转换来保存 long
数据而不丢失数据?
int
(在运行时中称为System.Int32
)始终是一个带符号的32位整数,在任何平台上都是如此,而long
(也称为System.Int64
)始终是一个带符号的64位整数,在任何平台上都是如此。因此,如果使用值大于Int32.MaxValue
或小于Int32.MinValue
的long
进行转换,则会丢失数据。
C#中的int类型 => System.Int32 => 取值范围为-2,147,483,648到2,147,483,647。
C#中的long类型 => System.Int64 => 取值范围为-9,223,372,036,854,775,808到9,223,372,036,854,775,807。
如果你的long数据超出了int的范围,并且使用Convert.ToInt32,则会抛出OverflowException异常,如果使用显式强制转换,则结果将出乎意料。
int
在 .NET 中是 32 位的。而 long
是 64 位的。这是有保证的。所以,不,int
不能容纳一个 long
而不丢失数据。
还有一种类型的大小取决于你运行的平台,即 IntPtr
(和 UIntPtr)。它可以是 32 位或 64 位。
在C#中,long是64位有符号整数,int是32位有符号整数,这种区别永远不会改变。
因此,在C#中,long可以容纳int,但int不能容纳long。
C/C++中,这个问题取决于平台。
int
是 System.Int32
,而 long
是 System.Int64
,前者为32位,后者为64位。我认为int是32位整数,而long是64位整数。