C#中的long
和int
之间的实际差异是什么?据我所知,在C/C++中,long在64位平台上是64位(当然取决于操作系统),但在C#中,它全部在.NET运行时运行,那么是否存在实际区别?C#中long和int的区别?
另一个问题:可以通过int
保持long
(通过转换)而不会丢失所有平台上的数据吗?
C#中的long
和int
之间的实际差异是什么?据我所知,在C/C++中,long在64位平台上是64位(当然取决于操作系统),但在C#中,它全部在.NET运行时运行,那么是否存在实际区别?C#中long和int的区别?
另一个问题:可以通过int
保持long
(通过转换)而不会丢失所有平台上的数据吗?
一个int
(又名运行时内System.Int32
)总是在任何平台上有符号的32位整数,a long
(又名System.Int64
)总是在任何平台上有符号的64位整数。因此,您不能从long
投射高于Int32.MaxValue
或低于Int32.MinValue
的值而不会丢失数据。
好的。但为什么这个页面https://msdn.microsoft.com/en-us/library/296az74e.aspx 显示MAX INT和MAX LONG的相同数字? 微软网页上有错误? – Vetras 2016-01-22 16:04:25
这些是C++类型,而不是C# – thecoop 2016-01-22 16:33:39
当你的谷歌'C#的最大值是'这个页面的第一页 - https://msdn.microsoft.com/en-us/library/296az74e.aspx - 这不适用于C# 。这似乎是OP为什么问这个问题。 – K48 2017-07-27 03:56:48
int
是.NET中的32位。 long
是64位。这是有保证的。所以,不,int
不能长时间不丢失数据。
有一种类型的尺寸会根据您运行的平台而变化,这是IntPtr
(和UIntPtr)。这可能是32位或64位。
当然是不同的 - 在C#中,long是一个64位的有符号整数,int是一个32位的有符号整数,这就是它永远都会有的方式。
所以在C#中,一个long可以容纳一个int,但是int不能容纳一个long。
C/C++该问题是平台相关的。
在C#中,int
是System.Int32
而long
是System.Int64
;前者是32位,后者是64位。相比之下,C++只提供了关于int/long大小的模糊保证(您可以通过C++标准挖掘精确,血腥,细节)。
我认为一个int是一个32位整数,而一个long是一个64位整数。
int在C#=> System.Int32 =>从-2,147,483,648到2,147,483,647。
用C#长=> System.Int64 =>从-9,223,372,036,854,775,808 9,223,372,036,854,775,807
如果你长期数据超出int的范围,并使用Convert.ToInt32那么就会抛出OverflowException异常,如果你使用显式强制那么结果将是意想不到的。
除了答案之外,请注意long和int具有静态MaxValue和MinValue常量。 – 2009-12-16 23:11:35
我知道这一点,但我不确定这些更改取决于32位和64位平台。搜索谷歌产生了很多C/C++的结果.. – Earlz 2009-12-16 23:14:41
该平台是在.NET中抽象出来的,所以你始终获得一致的运行时间(对于托管代码至少) – thecoop 2009-12-16 23:17:51