Aracılığıyla paylaş


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

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

C# dili başvuru belgesi, C# dilinin en son yayımlanan sürümünü gösterir. Ayrıca, yaklaşan dil sürümü için genel önizlemelerdeki özelliklere yönelik ilk belgeleri içerir.

Belgelerde ilk olarak dilin son üç sürümünde veya geçerli genel önizlemelerde sunulan tüm özellikler tanımlanır.

Tavsiye

Bir özelliğin C# dilinde ilk tanıtıldığı zamanları bulmak için C# dil sürümü geçmişi makalesine bakın.

Ö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 İçin
sbyte short, int, long, , float, double, decimalveya nint
bayt short, ushort, , int, uint, long, , ulong, float, double, decimal, nintveya nuint
kısa int, long, float, double, , decimalveya nint
ushort int, uint, long, , ulong, float, double, , decimal, nintveya nuint
int long, float, double, decimalveya nint
işaretsiz tam sayı long, ulong, float, double, , decimalveya nuint
long float, double veya decimal
ulong float, double veya decimal
float double
nint long, float, doubleveya decimal
nuint ulong, float, doubleveya decimal

Uyarı

, , , long, , veya nuintfloat ile , , veya longulongnintnuint arasında intyapılan ö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 byte türlerine sbyte örtük dönüştürme yoktur. ve double türlerinden decimal örtük dönüştürme yoktur.

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

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

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

Sabit değer hedef türün aralığında değilse, bir derleyici hatası CS0031 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 İçin
sbyte byte, ushort, uint, ulongveya nuint
bayt sbyte
kısa sbyte, byte, ushort, uint, , ulongveya nuint
ushort sbyte, byte veya short
int sbyte, byte, short, , ushort, uint, ulongveya nuint
işaretsiz tam sayı sbyte, byte, short, ushort, , intveya nint
long sbyte, byte, short, , ushort, int, uint, , ulong, nintveya nuint
ulong sbyte, byte, short, , ushort, int, uint, , long, nintveya nuint
float sbyte, byte, , short, ushort, int, , uint, long, ulong, decimal, nintveya nuint
çift 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

Uyarı

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 atılır. İş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ı boyuta ulaşması için ya işaret genişletilir ya da sıfır genişletilir. Kaynak türü imzalıysa, işaret genişletmesi kullanılır; kaynak türü işaretsizse sıfır genişletmesi 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 floatdouble dönüştürdüğünüzdedecimal, 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 decimalöğesine dönüştürdüğünüzdefloat, kaynak değer sırasıyla en double yakın veya float değere yuvarlanirdouble.

C# dil belirtimi

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

Ayrıca bakınız