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 , decimal veya nint |
byte | short , ushort , , int , uint , long , , ulong , float , double , decimal , nint veya nuint |
short | int , long , float , double veya decimal veya nint |
ushort | int , uint , long , ulong , , float , double veya decimal , nint veya nuint |
int | long , float , double veya decimal , nint |
uint | long , ulong , float , double veya decimal veya nuint |
long | float , double veya decimal |
ulong | float , double veya decimal |
float | double |
nint | long , float , double veya decimal |
nuint | ulong , float , double veya decimal |
Not
, , , long
, , veya float
nuint
ile , veya 'den nuint
long
ulong
nint
int
gelen ö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. nint
ulong
uint
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ürlerinebyte
örtük dönüştürme yoktur. vedecimal
türlerindendouble
örtük dönüştürme yoktur.Türü ve
float
veyadouble
türleri arasındadecimal
ö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
, ,ulong
nint
veyanuint
öğ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 , ulong veya nuint |
byte | sbyte |
short | sbyte , byte , ushort , uint , , ulong veya nuint |
ushort | sbyte , byte veya short |
int | sbyte , byte , short , , ushort , uint , ulong veya nuint |
uint | sbyte , byte , short , ushort , , int veya 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 , nint veya nuint |
double | sbyte , byte , short , , ushort , int , uint , , long , ulong , float , decimal , nint veya nuint |
ondalık | sbyte , byte , short , , ushort , int , uint , , long , ulong , float , double , nint veya nuint |
nint | sbyte , , byte short , , ushort , int , uint , , ulong veyanuint |
nuint | sbyte , , byte short , , ushort , int , uint , , long veyanint |
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
veyafloat
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
double
float
double
, değer enfloat
yakın değere yuvarlanir. Değer türünedouble
sığmayacakfloat
kadar küçük veya çok büyükse, sonuç sıfır veya sonsuz olur.veya
decimal
double
dönüştürdüğünüzdefloat
, kaynak değer gösterimedecimal
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
decimal
temsil edilemeyecek kadar küçükse sonuç sıfır olur.Kaynak değer NaN (sayı değil), sonsuz veya olarak
decimal
temsil edilemeyecek kadar büyükse, bir OverflowException oluşturulur.
veya
double
öğesine dönüştürdüğünüzdedecimal
, kaynak değer sırasıyla enfloat
yakın veyadouble
değere yuvarlanirfloat
.
C# dili belirtimi
Daha fazla bilgi için C# dil belirtiminin aşağıdaki bölümlerine bakın: