2009-12-16 75 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異常,如果你使用顯式強制那麼結果將是意想不到的。

相關問題