0.5 derleyici İşlenenlerin türlerine dayalı Bölme işleminin çıktı türünü belirler olmasıdır verir 0 float temp = (float)b/a;
ise float temp = b/a;
verir nedeni değil, hedef depolama türü. Basitçe:
int / int = int
float/ int = float
int /float = float
float/float = float
Yani float temp = b/a;
yaptığınızda b
ve a
tamsayı ayrımın yapıyor ve sonra tip float
bir değişken içine (sizin örnekte 0) çıkan tamsayı depolamak ediyoruz. Özünde, değer kayan noktaya dönüştürüldüğü zaman, aradığınız bilgiyi zaten kaybettiniz (kayan noktalı bir bölme yapmak istediğinizi varsayarak) ve dönüşüm geri getirmeyecektir. Eğer (yine, bir kayan nokta ayrımı yapmak istiyorum varsayılarak) istediğiniz sonucu alabilmek için
, size bölmek önce float
için işlenen en az birini döküm gerekir.
Bu derleyici davranışının ardındaki nedenleri bilen var mı? Açıktır ki, tamsayı bölümlerinin tonlarca kombinasyonu tamsayı olmayan bir değerle sonuçlanacak, bu yüzden derleyicinin her durumda bir tamsayı istediğinizi varsayması garip görünüyor. –