2009-12-16 51 views
32

C#中的longint之间的实际差异是什么?据我所知,在C/C++中,long在64位平台上是64位(当然取决于操作系统),但在C#中,它全部在.NET运行时运行,那么是否存在实际区别?C#中long和int的区别?

另一个问题:可以通过int保持long(通过转换)而不会丢失所有平台上的数据吗?

+0

除了答案之外,请注意long和int具有静态MaxValue和MinValue常量。 – 2009-12-16 23:11:35

+1

我知道这一点,但我不确定这些更改取决于32位和64位平台。搜索谷歌产生了很多C/C++的结果.. – Earlz 2009-12-16 23:14:41

+0

该平台是在.NET中抽象出来的,所以你始终获得一致的运行时间(对于托管代码至少) – thecoop 2009-12-16 23:17:51

回答

59

一个int(又名运行时内System.Int32)总是在任何平台上有符号的32位整数,a long(又名System.Int64)总是在任何平台上有符号的64位整数。因此,您不能从long投射高于Int32.MaxValue或低于Int32.MinValue的值而不会丢失数据。

+0

好的。但为什么这个页面https://msdn.microsoft.com/en-us/library/296az74e.aspx 显示MAX INT和MAX LONG的相同数字? 微软网页上有错误? – Vetras 2016-01-22 16:04:25

+1

这些是C++类型,而不是C# – thecoop 2016-01-22 16:33:39

+0

当你的谷歌'C#的最大值是'这个页面的第一页 - https://msdn.microsoft.com/en-us/library/296az74e.aspx - 这不适用于C# 。这似乎是OP为什么问这个问题。 – K48 2017-07-27 03:56:48

8

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

有一种类型的尺寸会根据您运行的平台而变化,这是IntPtr(和UIntPtr)。这可能是32位或64位。

4

当然是不同的 - 在C#中,long是一个64位的有符号整数,int是一个32位的有符号整数,这就是它永远都会有的方式。

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

C/C++该问题是平台相关的。

4

在C#中,intSystem.Int32longSystem.Int64;前者是32位,后者是64位。相比之下,C++只提供了关于int/long大小的模糊保证(您可以通过C++标准挖掘精确,血腥,细节)。

0

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

15

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异常,如果你使用显式强制那么结果将是意想不到的。

相关问题