爲什麼Array.Length
是int,而不是uint
。這讓我感到困擾(只是一點點),因爲長度值永遠不會爲負。爲什麼Array.Length是一個int,而不是一個uint
這也迫使我用我自己的類的長度屬性的int,因爲當你 指定一個int值,這需要顯式轉換...
所以最終的問題是:有沒有用於一個無符號整數(uint
)?即使微軟似乎也不會使用它們。
爲什麼Array.Length
是int,而不是uint
。這讓我感到困擾(只是一點點),因爲長度值永遠不會爲負。爲什麼Array.Length是一個int,而不是一個uint
這也迫使我用我自己的類的長度屬性的int,因爲當你 指定一個int值,這需要顯式轉換...
所以最終的問題是:有沒有用於一個無符號整數(uint
)?即使微軟似乎也不會使用它們。
unsigned int類型不符合CLS,因此會限制性能的使用情況,那些實現UInt
的語言。
在這裏看到:
框架1.1
Framework 2.0的
通常,對整數值進行簽名,除非您明確需要無符號值。這只是他們使用的方式。我可能不同意這種選擇,但事實就是如此。如果你的數組或類似的數據結構需要一個UInt32長度,你應該考慮其他數據結構。如果你的數組或類似的數據結構需要一個UInt32長度,你應該考慮其他數據結構。
隨着字節數組,的Int32會給你2GB值
」但這只是它的方式。「 - 不,事情從來就不是這樣。總是有一個設計決策正在制定中,並且爲什麼總是要付出代價。人們可以從正反兩方面學到一些東西,或者讓設計師(在某些情況下)參與關於它們的討論。始終提出問題! :) – 2009-06-25 10:54:38
我認爲它也可能與更簡單的事情有關,因爲Array.Length當然會在某些時候被添加到負數,如果Array.Length是無符號的,並且被添加到負int(2的補充),可能會有混亂的結果。
請舉個例子嗎? `uint lenght = 3; int x = -4; Console.WriteLine(x + lenght);`yield -1就好了。 – 2014-06-12 22:46:01
看起來沒有人提供了「最終問題」的答案。
我相信主要使用unsigned int是爲了提供與外部系統(P/Invoke之類)更容易的接口,並且涵蓋了被移植到.NET的各種語言的需求。
當連接多個較小值以產生較大值時,無符號類型是必不可少的。通過計算`(HighPart << 16)+ LowPart`,可以將兩個UInt16組合成一個UInt32,並且可以通過`(Uint16)(Value >> 16)`和`(Uint16)將Value分解爲兩個UInt16 &65535)`。如果LowPart必須是簽名類型,這樣的操作將非常不方便。如前所述,簽名類型和未簽名類型之間的交互往往是令人困惑和有問題的。無符號類型應該在很多方面被認爲是他們自己的世界。 – supercat 2013-02-03 17:45:16
許多原因:
儘管下面提出的問題,我認爲它應該改變爲UInt。 – alan2here 2011-11-28 23:43:24
@alan2這樣的改變會破壞幾乎所有的代碼,所以如果你問我,它就不會發生! 「 – Peter 2012-08-23 14:38:34