Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Çoğu C işleci, bir ifadenin işlenenlerini ortak bir türe getirmek veya kısa değerleri makine işlemlerinde kullanılan tamsayı boyutuna genişletmek için tür dönüştürmeleri gerçekleştirir. C işleçleri tarafından gerçekleştirilen dönüştürmeler, belirli işleç ve işlenen veya işlenen türüne bağlıdır. Ancak, birçok işleç integral ve kayan türlerin işlenenleri üzerinde benzer dönüştürmeler gerçekleştirir. Bu dönüştürmeler "aritmetik dönüştürmeler" olarak bilinir. İşlenen değerin uyumlu bir türe dönüştürülmesi, değerinde hiçbir değişikliğe neden olmaz.
Aşağıda özetlenen aritmetik dönüştürmelere "normal aritmetik dönüştürmeler" adı verilir. Bu adımlar yalnızca aritmetik tür bekleyen ikili işleçler için uygulanır. Amaç, aynı zamanda sonucun türü olan ortak bir tür vermektir. Gerçekte hangi dönüştürmelerin gerçekleştiğini belirlemek için derleyici, ifadedeki ikili işlemlere aşağıdaki algoritmayı uygular. Aşağıdaki adımlar öncelik sırası değildir.
İşlenenlerden biri türündeyse
long double, diğer işlenen türünelong doubledönüştürülür.Yukarıdaki koşul karşılanmazsa ve işlenenlerden herhangi biri türündeyse
double, diğer işlenen türünedoubledönüştürülür.Yukarıdaki iki koşul karşılanmazsa ve işlenenlerden herhangi biri türündeyse
float, diğer işlenen türünefloatdönüştürülür.Yukarıdaki üç koşul karşılanmazsa (işlenenlerin hiçbiri kayan türde değilse), işlenenlerde tam sayı dönüştürmeleri aşağıdaki gibi gerçekleştirilir:
İşlenenlerden biri türündeyse
unsigned long, diğer işlenen türüneunsigned longdönüştürülür.Yukarıdaki koşul karşılanmazsa ve işlenenlerden ikisi de türündeyse
long,unsigned inther iki işlenen de türüneunsigned longdönüştürülür.Yukarıdaki iki koşul karşılanmazsa ve işlenenlerden biri türündeyse
long, diğer işlenen türünelongdönüştürülür.Yukarıdaki üç koşul karşılanmazsa ve işlenenlerden biri türündeyse
unsigned int, diğer işlenen türüneunsigned intdönüştürülür.Yukarıdaki koşullardan hiçbiri karşılanmazsa, her iki işlenen de türüne
intdönüştürülür.
Aşağıdaki kodda bu dönüştürme kuralları gösterilmektedir:
float fVal;
double dVal;
int iVal;
unsigned long ulVal;
dVal = iVal * ulVal; /* iVal converted to unsigned long
* Uses step 4.
* Result of multiplication converted to double
*/
dVal = ulVal + fVal; /* ulVal converted to float
* Uses step 3.
* Result of addition converted to double
*/