後,我決定執行我Int128在C#中,我認爲這將是很好,使它看起來像其他dotNet的數據類型。但我可以沒有實現以下特點:
- 後綴初始化:如13L和0.2D
我可以在C#中創建自己的後綴嗎?
如果我不能......我該如何初始化它?
即
Int128 a= ??
後,我決定執行我Int128在C#中,我認爲這將是很好,使它看起來像其他dotNet的數據類型。但我可以沒有實現以下特點:
我可以在C#中創建自己的後綴嗎?
如果我不能......我該如何初始化它?
即
Int128 a= ??
您不能創建自己的後綴初始化程序 - 這是該語言的一部分,並已編譯到編譯器中。另一方面,如果你編寫自己的C#編譯器,你可以做任何你想做的事,並以你想要的方式擴展它。
至於如何初始化它 - 這取決於你如何寫它。如果它是一個類,則需要使用關鍵字new
對其進行初始化,或者將一些隱式轉換寫入精度較低的數值類型。
正如Jon指出的那樣,如果不進行字符串操作,您將無法將其設置爲大於ulong.MaxValue
的值。您還需要以某種形式(字符串?ulongs
?)在內部表示並確保所有轉換和操作都正常工作(溢出情況如何?)。
不,你不能創建自己的C#文字形式。
您可能有來自int
,long
,uint
和ulong
,允許隱式轉換:
Int128 a = 100;
但你不能指定值比ulong.MaxValue
那樣大。
從decimal
進行隱式轉換會允許更大的範圍,但這不是一個好主意,因爲您將丟失任何不是整數的值的數據。
基本上沒有什麼能夠允許大於ulong.MaxValue
的字面保證整數值 - 你可以解析一個字符串,但這不是很理想。或者,您可以創建一個構造函數,其中兩個兩個,一個用於底部64位,一個用於頂部64位。
不,你不能做後綴初始化。即將推出的C++標準將提供一點可愛......但我離題了。
最明顯的選擇是Int128(long hi, ulong lo)
和Int128(string)
。
您可以查看4.0中的新BigInteger結構以獲取有關初始化的提示。http://msdn.microsoft.com/en-us/library/system.numerics.biginteger.aspx
看到這篇文章http://stackoverflow.com/questions/227731/int128-in-net – 2010-05-12 14:26:50