C#中的long
和int
之间的实际差异是什么?据我所知,在C / C ++中,一些64位平台上的长度是64位(当然取决于操作系统)但是在C#中它们都在.NET运行时运行,所以有实际的区别吗?
另一个问题:int
可以持有long
(通过演员表)而不会丢失所有平台上的数据吗?
答案 0 :(得分:69)
int
(运行时中的System.Int32
)在任何平台上始终是带符号的32位整数,long
(又名System.Int64
)始终是带符号的64任何平台上的位整数。因此,您无法使用long
或Int32.MaxValue
以上的值Int32.MinValue
投射,而不会丢失数据。
答案 1 :(得分:19)
int in C#=> System.Int32 =>从-2,147,483,648到2,147,483,647。
长在C#=> System.Int64 => from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
如果您的长数据超出int的范围,并且您使用Convert.ToInt32,那么它将抛出OverflowException,如果您使用显式强制转换,则结果将是意外的。
答案 2 :(得分:8)
int
在.NET中是32位。 long
是64位。这是有保证的。所以,不,int
在不丢失数据的情况下不能持久。
有一种类型,其大小会根据您运行的平台而变化,即IntPtr
(和UIntPtr)。这可以是32位或64位。
答案 3 :(得分:4)
当然有区别 - 在C#中,long是64位有符号整数,int是32位有符号整数,这就是它始终如一的方式。
所以在C#中,long可以保存一个int,但是int不能保持long。
C / C ++该问题与平台有关。
答案 4 :(得分:4)
在C#中,int
是System.Int32
而long
是System.Int64
;前者是32位,后者是64位。
C ++仅提供关于int / long大小的模糊保证,相比之下(您可以通过C ++标准深入了解精确,详细,详细信息)。
答案 5 :(得分:0)
我认为int是32位整数,而long是64位整数。