Merhalar, birisi bana bunun sonucunun nasıl hesaplanacağını anlatabilir mi? %lf ne demektir? bu işlemin sonucu nasıl 14.5 oluyor bir türlü bulamadım. printf("%lf",11/2+7/2.0+5/2*3); |
C de işlem sırası ile ilgili



-
-
%lf long float gibi görünsede aslında double veri tipini yazdırmak için kullanılıyor.
işleme gelince, önce şu şekilde ayıralım:
çarpma ve bölmenin toplama ve çıkarmaya göre işlem önceliği vardır;
(11/2) + (7/2.0) + (5/2*3)
çarpma ve bölme arasında öncelik yoktur, soldan sağa işlenir. yani;
(11/2) + (7/2.0) + ((5/2)*3)
buradaki trick, bölme işlemlerinde sadece ortadaki işlemdeki 2.0 sayısının özellikle float olduğu belirtilmiş. dolayısıyla diğerleri integer olarak işlenir. yani;
11/2=5
7/2.0=3.5
5/2=2
2*3=6
topla hepsini (40 yapar :D);
5+3.5+6 = 14.5
-
Çok teşekkür ederim cevap için. Özelden de bir sor sordum. Cevaplarsanız memnun olurum.
-
@arrap telefon doğrulamam olmadığı için ÖM kullanamıyorum. int float konusunu soruyorsan;
c de "implicit int" kuralından dolayı, açıkça bir veri tipi olmayan herşey "int" olarak kabul edilir. mesela dönüş tipi olmayan bir fonksiyon tanımlarsan;
topla(int a, int a)
{
}
bu fonksiyonun dönüş tipi default olarak "int" tir. soruda 2.0 dışında diğer veriler için herhangi bir explicit tanım olmadığından hepsi int olarak kabul edilir.
şimdi senin soruna gelirsek, integer veri tipinde virgülden sonrası olmadığı için, iki integer veri tipinin sonucu integer olmasa bile "implicit conversion" dan dolayı noktadan sonrası gözardı edilir ve integere çevrilir. yani;
11/2=5.5 ama integer veri tipi noktadan sonrasını saklayamayacağı için 5.5 un noktadan sonrası atılır ve sonuç integer olarak 5 olur.
5/2 de aynı şekilde 2.5 değil 2 olur.
-
Tekrardan teşekkür ederim. Arada yazacağım bi kaç gün rahatsız ederim :)
< Bu ileti iOS uygulamasından atıldı >
Bu mesaj IP'si ile atılan mesajları ara Bu kullanıcının son IP'si ile atılan mesajları ara Bu mesaj IP'si ile kullanıcı ara Bu kullanıcının son IP'si ile kullanıcı ara
KAPAT X