考慮以下代碼:C#如何知道文字是什麼類型?
double i = 0xF0000000;
Console.WriteLine(0xF0000000.GetType());
Console.WriteLine(i.GetType());
爲什麼C#打印System.UInt32
的第一個和System.Double
的第二個?
這是因爲,編譯器默認推斷文字類型爲var
?
考慮以下代碼:C#如何知道文字是什麼類型?
double i = 0xF0000000;
Console.WriteLine(0xF0000000.GetType());
Console.WriteLine(i.GetType());
爲什麼C#打印System.UInt32
的第一個和System.Double
的第二個?
這是因爲,編譯器默認推斷文字類型爲var
?
在這一行:
double i = 0xF0000000;
的字面是uint
類型,但它是被隱式轉換爲double
。當您撥打i.GetType()
即總是打印System.Double
,因爲變量的類型是double
... 只有它可以容納的一種價值是double
。
請注意,如果您以long
或ulong
開頭,則此轉換爲double
意味着您可能會失去精度。例如:
using System;
public class Program
{
static void Main()
{
long x = 123456789;
double y = 123456789;
Console.WriteLine(x.ToString("n"));
Console.WriteLine(y.ToString("n"));
}
}
打印
123,456,789,012,345,678.00
123,456,789,012,346,000.00
注意最後的幾個數字是如何迷失在double
,因爲從long
到double
隱式轉換可能會失去精度。 (兩者都有64位可用,但只在double
其中的一些位用於尾數。)
它不是爲int
或uint
文字的問題,但它是值得的注意,轉換正在發生。
根據Integer Literals (C#)整數文字的類型取決於該值及其後綴。
- 如果文字沒有後綴,它具有第一這些類型的,其中它的值可被表示的:整數,UINT,長,ULONG。
- 如果文字後綴爲U或u,則它具有第一個可以表示其值的類型:uint,ulong。
- 如果文字後綴爲L或l,則它具有第一個可以表示值的類型:long,ulong。
- 如果文字後綴爲UL,UL,UL,UL,LU,Lu,IU或LU,則它是ulong類型。
0xF0000000沒有後綴,所以它有第一類型可以表示它(INT,UINT,長,ULONG)
所以0xF0000000有類型uint。
decimal x = 0xF00000000;
這裏x是一個十進制變量。當你給它分配一個uint值時,該值被隱含地轉換成一個小數(所以它將適合於十進制變量)。
沒有'var'類型。 –