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