Yerleşik sayısal dönüştürmeler (C# başvurusu)

C# bir dizi integral ve kayan nokta sayısal türü sağlar. Örtük veya açık olmak üzere iki sayısal tür arasında bir dönüştürme vardır. Açık dönüştürme gerçekleştirmek için bir atama ifadesi kullanmanız gerekir.

Örtük sayısal dönüştürmeler

Aşağıdaki tabloda yerleşik sayısal türler arasındaki önceden tanımlanmış örtük dönüştürmeler gösterilmektedir:

Kaynak Amaç
sbyte short, int, long, , float, double, decimalveya nint
byte short, ushort, , int, uint, long, , ulong, float, double, decimal, nintveya nuint
short int, long, float, doubleveya decimalveya nint
ushort int, uint, long, ulong, , float, doubleveya decimal, nintveya nuint
int long, float, doubleveya decimal, nint
uint long, ulong, float, doubleveya decimalveya nuint
long float, double veya decimal
ulong float, double veya decimal
float double
nint long, float, doubleveya decimal
nuint ulong, float, doubleveya decimal

Not

, , , long, , veya floatnuint ile , veya 'den nuintlongulongnintintgelen örtük dönüştürmeler duyarlık kaybına double neden olabilir, ancak hiçbir zaman bir büyüklük sırası kaybına neden olmaz. nintulonguint Diğer örtük sayısal dönüştürmeler hiçbir zaman bilgi kaybetmez.

Ayrıca şunları da unutmayın:

  • Herhangi bir tam sayı türü , herhangi bir kayan nokta sayısal türüne örtük olarak dönüştürülebilir.

  • ve sbyte türlerine byte örtük dönüştürme yoktur. ve decimal türlerinden double örtük dönüştürme yoktur.

  • Türü ve float veya double türleri arasında decimal örtük dönüştürme yoktur.

  • Türündeki sabit ifadenin int değeri (örneğin, tamsayı değişmez değeriyle temsil edilen bir değer), hedef türün aralığı içindeyse örtük olarak , byte, short, ushort, uint, , ulongnintveya nuintöğesine dönüştürülebilirsbyte:

    byte a = 13;
    byte b = 300;  // CS0031: Constant value '300' cannot be converted to a 'byte'
    

    Yukarıdaki örnekte gösterildiği gibi, sabit değer hedef türün aralığı içinde değilse, cs0031 derleyici hatası oluşur.

Açık sayısal dönüştürmeler

Aşağıdaki tabloda, örtük dönüştürme olmayan yerleşik sayısal türler arasındaki önceden tanımlanmış açık dönüştürmeler gösterilmektedir:

Kaynak Amaç
sbyte byte, ushort, uint, ulongveya nuint
byte sbyte
short sbyte, byte, ushort, uint, , ulongveya nuint
ushort sbyte, byte veya short
int sbyte, byte, short, , ushort, uint, ulongveya nuint
uint sbyte, byte, short, ushort, , intveya nint
long sbyte, byte, short, ushort, int, uint, ulong, nint veya nuint
ulong sbyte, byte, short, ushort, int, uint, long, nint veya nuint
float sbyte, byte, , short, ushort, int, , uint, long, ulong, decimal, nintveya nuint
double sbyte, byte, short, , ushort, int, uint, , long, ulong, float, decimal, nintveya nuint
ondalık sbyte, byte, short, , ushort, int, uint, , long, ulong, float, double, nintveya nuint
nint sbyte, , byteshort, , ushort, int, uint, , ulongveyanuint
nuint sbyte, , byteshort, , ushort, int, uint, , longveyanint

Not

Açık sayısal dönüştürme, veri kaybına neden olabilir veya genellikle bir OverflowExceptionözel durum oluşturur.

Ayrıca şunları unutmayın:

  • Bir integral türündeki bir değeri başka bir tamsayıyı türüne dönüştürdüğünüzde, sonuç taşma denetimi bağlamını temel alır. Denetlenen bir bağlamda, kaynak değer hedef türün aralığı içindeyse dönüştürme başarılı olur. Aksi takdirde, bir OverflowException oluşturulur. İşaretlenmemiş bir bağlamda dönüştürme her zaman başarılı olur ve aşağıdaki gibi devam eder:

    • Kaynak türü hedef türden büyükse, kaynak değeri "ek" en önemli bitleri atılarak kesilir. Sonuç daha sonra hedef türün değeri olarak değerlendirilir.

    • Kaynak türü hedef türden küçükse, kaynak değer hedef türle aynı boyutta olması için işaret genişletilmiş veya sıfır genişletilmiş olur. Kaynak türü imzalıysa, oturum açma uzantısı kullanılır; kaynak türü işaretsizse zero-extension kullanılır. Sonuç daha sonra hedef türün değeri olarak değerlendirilir.

    • Kaynak türü hedef türle aynı boyuttaysa, kaynak değer hedef türün değeri olarak değerlendirilir.

  • Bir decimal değeri tam sayı türüne dönüştürdüğünüzde, bu değer sıfıra doğru en yakın tam sayı değerine yuvarlanir. Sonuçta elde edilen tam sayı değeri hedef türün aralığının dışındaysa, bir OverflowException oluşturulur.

  • Bir double veya float değerini tam sayı türüne dönüştürdüğünüzde, bu değer sıfıra doğru en yakın tam sayı değerine yuvarlanir. Sonuçta elde edilen tam sayı değeri hedef türün aralığının dışındaysa, sonuç taşma denetimi bağlamını temel alır. denetlenen bir bağlamda, OverflowException işaretlenmemiş bir bağlamda ise hedef türün belirtilmemiş bir değeri elde edilir.

  • değerine dönüştürdüğünüzde doublefloatdouble, değer en float yakın değere yuvarlanir. Değer türüne double sığmayacak float kadar küçük veya çok büyükse, sonuç sıfır veya sonsuz olur.

  • veya decimaldouble dönüştürdüğünüzdefloat, kaynak değer gösterime decimal dönüştürülür ve gerekirse 28. ondalık basamak sonrasına en yakın sayıya yuvarlanir. Kaynak değerin değerine bağlı olarak aşağıdaki sonuçlardan biri oluşabilir:

    • Kaynak değer olarak decimaltemsil edilemeyecek kadar küçükse sonuç sıfır olur.

    • Kaynak değer NaN (sayı değil), sonsuz veya olarak decimaltemsil edilemeyecek kadar büyükse, bir OverflowException oluşturulur.

  • veya doubleöğesine dönüştürdüğünüzdedecimal, kaynak değer sırasıyla en float yakın veya double değere yuvarlanirfloat.

C# dili belirtimi

Daha fazla bilgi için C# dil belirtiminin aşağıdaki bölümlerine bakın:

Ayrıca bkz.