C#中long和int的区别是什么?

49

什么是在C#中longint之间的实际区别? 我了解在 C/C++ 中,长整型long在某些 64 位平台上会是 64 位(当然取决于操作系统),但在 C# 中,它都在 .NET 运行时中运行,所以是否存在实际区别呢?

另一个问题:在所有平台上,int能否通过强制类型转换来保存 long 数据而不丢失数据?


1
除了答案之外,请注意 long 和 int 有静态的 MaxValue 和 MinValue 常量。 - Yuriy Faktorovich
1
我知道这一点,但我不确定这些是否会因为32位和64位平台而改变。在谷歌上搜索只得到了很多C/C++的结果。 - Earlz
在 .NET 中,平台被抽象化处理了,因此您始终可以获得一致的运行时(至少对于托管代码是这样)。 - thecoop
不要将.NET CLR视为虚拟机,而应将其视为即时编译器,这样更有意义。在任何东西运行之前,.NET代码会在应用程序启动时编译为完全本地机器代码。 - Joel Coehoorn
7
一个long和一个int的差是一个long,当然它们的和也是long。 :-) - Eric Lippert
6个回答

75

int(在运行时中称为System.Int32)始终是一个带符号的32位整数,在任何平台上都是如此,而long(也称为System.Int64)始终是一个带符号的64位整数,在任何平台上都是如此。因此,如果使用值大于Int32.MaxValue或小于Int32.MinValuelong进行转换,则会丢失数据。


5
好的。但是为什么这个页面https://msdn.microsoft.com/en-us/library/296az74e.aspx 显示的是MAX INT和MAX LONG相同的数字?微软页面上有错误吗? - Vetras
5
这些是 C++ 的类型,而不是 C#。 - thecoop
5
在谷歌搜索“C# long max value”时,第一页的搜索结果中出现了这个页面:https://msdn.microsoft.com/en-us/library/296az74e.aspx,但该页面并不是针对C#的。这可能是提问者提出问题的原因。 - user6269864

28

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异常,如果使用显式强制转换,则结果将出乎意料。


8

int 在 .NET 中是 32 位的。而 long 是 64 位的。这是有保证的。所以,不,int 不能容纳一个 long 而不丢失数据。

还有一种类型的大小取决于你运行的平台,即 IntPtr(和 UIntPtr)。它可以是 32 位或 64 位。


5

在C#中,long是64位有符号整数,int是32位有符号整数,这种区别永远不会改变。

因此,在C#中,long可以容纳int,但int不能容纳long。

C/C++中,这个问题取决于平台。


4
在C#中,intSystem.Int32,而 longSystem.Int64,前者为32位,后者为64位。
相比之下,C++只提供了有关 int/long 字段大小的模糊保证(您可以查看 C++ 标准来获取确切、详细的细节信息)。

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接