= ile == arasındaki fark c programlama dili

Başlatan 007, 15 Ekim 2018 - 11:51:43

« önceki - sonraki »

0 Üyeler ve 2 Ziyaretçi konuyu incelemekte.

007

google de böyle arattım. c programlama yazmayınca java çıktı. Belki farklıdır dedim. Önceden bu konuyu görmüştüm. Ama mantığını kavrayamadım. Aşağıdaki programda ='i == yaptım farklı * bir şey oldu. =='i = yaptım aynı şey oldu galiba. = ile == arasındaki fark ne? Bir tek kullanım alanı mı var yoksa çok mu?

#include<stdio.h>

int main( void )

{
    int xx;
    printf("* * * Birinci döngü... * * *\n");
    for (xx = 5; xx < 15; xx = xx + 1)
    {
        if (xx == 8 )
         break;
        printf("Break dongusunun icinde, xx in degeri simdi %d\n", xx);
       
    }
    printf("* * * Ikinci dongu... * * * \n");
    for(xx = 5; xx < 15; xx = xx + 1)
    {
           if(xx == 8 )
                 continue;
           printf("Continue dongusunun icinde, xx in degeri simdi %d\n", xx);
    }
    return 0;
}
2 kuruşluk ben EMİR VEREN 4 kuruşlukların 5 kuruşluk işlerini yaparım.

Limonata

Selamün Aleyküm;

C dillerinde "=" operatörü bir değişkene değer atmamızı sağlar. "==" operatörü ise "eşit mi?" koşulunu denetler, eğer değerler eşitse true (1) döndürür, değilse false (0) döndürür.
İlk yazdığın döngüde xx = 5 olarak başlıyor xx < 15 olduğu durumda (yani xx 14 veya daha küçük bir sayı olursa) döngü bloklarına giriyor. Döngü bloklarında if (xx == 8 ) yani xx 8 ise break ile döngüden çıkıyor. İkinci döngüde yine xx = 5 olarak başlayıp xx < 15 olduğu müddetçe döngü bloklarına giriyor. Döngü bloğuna girdiğinde if (xx == 8 ) yani xx 8 ise continue ile geri kalan işlemleri yapmadan döngünün başına dön deniliyor.

if (xx = 8 ) break; dersen xx'e 8 değerini atar ve döngüden çıkar. if (xx == 8 ) break; dersen xx 8'e eşit mi değil mi diye kontrol eder, eşitse döngüden çıkar, değilse geri kalan işlemleri yapıp döngüyü tekrarlar.

007

#2
Teşekkür ederim. Konuyu daha iyi anladım. Belli bir değere kadar uzattıkca uzatabilirim. Başka şeylerde yapılabilir. Ezber yapmak istesem unutkanlık var. Uzatılacağını ezberlesem, tıkanırım...
2 kuruşluk ben EMİR VEREN 4 kuruşlukların 5 kuruşluk işlerini yaparım.

Amenofis

C'de birçok dilin aksine boolean (true-false) diye ayrı bir tür yoktur. Koşullarda tamsayılar kullanılır. Yazdığın ifadenin sonucu 0 ise koşul yanlış, 0 değilse koşul doğru demektir. Negatif sayılar da doğru (true) dur.  boolean olmadığı için mantıksal operatörler 0 ve 0 olmayan bir sayı (genelde 1) döndürür.

int a = 0, b = 2, c = 3;
int d = b < c;    // d = 1
d = a > b;      // d = 0
d = a == 0;    // d = 1
d = !a;     // d = 1
d = !c || b;       // d = 1
d = a && b;     // d = 0

Aşağıdaki 2 koşul eşittir.
if(x != 0)
...
if(x)
...
Bu ikisi de eşit.
if(x == 0)
...
if(!x)
...

Yine birçok dilin aksine C'de atama (=) operatörü de değer döndürür. Bu yüzden koşullarda kullanılabilir. = operatörünün döndürdüğü değer değişkene atanan değerdir. 
if(x = 5)
...
Önce x'e 5 yazdı, sonra x'in değerini (5) döndürdü. 5 != 0 olduğu için koşul doğrudur, yani if bloğu çalışır. Bu olay döngülerde kullanışlıdır.

while(x = fonk())
a = x * 3;
...
fonksiyondan 0 dönene kadar döngü devam eder. Ve dönen değer x'e yazıldığı için döngü içinde kullanabiliriz.

007

Amenofis hocam. Vakit ayırıp dediklerinizi anlamak için araştırma yapmadığım için özür dilerim anladıklarımı ve anlamadıklarımı direk yazacağım. Ona göre düzeltirseniz veya açıklayacağınızı düşünüyorum. Hocam yanlış anladıysam da okumanız biraz eğlence olur. :)=

True-false anladığım kadarıyla 1-0 anlamına geliyor ve ona göre işlem yapıyor. C'de işe tam anlamıyla doğru yok. 0'sa direk yanlış, 0 değilse doğrudur. Negatif ise yanlış görmüyor ve doğru kabul ediyor. Aslında yanlış.


Aşağıda ok işaretinden sonra anladığı mı yazdım eklemek istediğiniz bir şey varsa ekleyebilirsiniz. Yanlışım varsa düzeltiniz.


int a = 0, b = 2, c = 3;
int d = b < c;    // d = 1  ----> Burada d'yi de 2 yerine koyuyor. c 2 den büyük. Yanlış değil doğru.
d = a > b;      // d = 0 ------> d'ye atanan 3 a ya eşit değil. Bu yanlış.
d = a == 0;    // d = 1 ------->  d eşit a diyor fakat bu sonuç yanlıştır. Sonucu verdiği için doğrudur.
d = !a;     // d = 1      ----------> d eşit değil a. bu da doğru.
d = !c || b;       // d = 1  -------> veya dediği için ikisinden birini değerlendirebilir.
d = a && b;     // d = 0  -------->  ve dediği için a eşit olmadığından yanlış.


if(x != 0)  ve  if(!x) ------> Bu yanlışında doğru olabileceğini gösteriyor. Her ikisi program tarafından aynı ama ikincisi negatifleri de kapsıyor. !x ile ne kastettiğini şöyle düşündüm. = dışındaki tüm sayılar.


Alttakini anlamadım.
Bu ikisi de eşit.
if(x == 0)
...
if(!x)
...

Aşağıdakini anladım.
Yine birçok dilin aksine C'de atama (=) operatörü de değer döndürür. Bu yüzden koşullarda kullanılabilir. = operatörünün döndürdüğü değer değişkene atanan değerdir.
if(x = 5)
...
Önce x'e 5 yazdı, sonra x'in değerini (5) döndürdü. 5 != 0 olduğu için koşul doğrudur, yani if bloğu çalışır. Bu olay döngülerde kullanışlıdır.




2 kuruşluk ben EMİR VEREN 4 kuruşlukların 5 kuruşluk işlerini yaparım.

ethernity

Alıntı yapılan: 007 - 16 Ekim 2018 - 12:42:49

Alttakini anlamadım.
Bu ikisi de eşit.
if(x == 0)
...
if(!x)
...


Ön ek: Bu eşitlik x'in yalnız 0 olduğu zaman geçerli oiabilir bence.

Tam emin olmamakla birlikte sanırım şu anlama geliyor. if bloğu parantez içerisindeki değer true olduğu zaman çalışır. Bu örnekte x==0 ifadesi true  (C dilinde 1) değeri döndürür ve bu, if boluğunun çalışmasını sağlar. Aynı şekilde !x ifadesi de 0-da farklı değer olduğu için (0 olmayan her sayı true anlamına geliyordu) yine if bloğu çalışır. Dolayısıyla if(x==0) ve if(!x) ifadesi aynı anlama gelir.

007

2 kuruşluk ben EMİR VEREN 4 kuruşlukların 5 kuruşluk işlerini yaparım.

Amenofis

Türkiyede c/c++ fazla kullanılmadığı için yazılan dersler de genelde amatör seviyede oluyor. Birçok önemli hususu atlıyorlar.

! DEĞİL (LOGICAL NOT) operatörü. true değerini false'e, false değerini true'ya çevirir.

Neyse çalışmaya devam et bol şans.

007

2 kuruşluk ben EMİR VEREN 4 kuruşlukların 5 kuruşluk işlerini yaparım.

ethernity

Alıntı yapılan: Amenofis - 16 Ekim 2018 - 16:22:43
Türkiyede c/c++ fazla kullanılmadığı için yazılan dersler de genelde amatör seviyede oluyor. Birçok önemli hususu atlıyorlar.

! DEĞİL (LOGICAL NOT) operatörü. true değerini false'e, false değerini true'ya çevirir.

Neyse çalışmaya devam et bol şans.

C diliyle pek tanışıklığım olmadığı için yanlış sonuç çıkarmış olabilirim.

Sıfırdan farklı bir değerin önüne ! yazdığımızda bunu sıfır mı yapıyor yani? Boolean tipinin tanımlanmamış olması garip geldi açıkçası.

Amenofis

[mention=642347]@007[/mention]

Atama ve karşılaştırmayı birbirine karıştırmaya devam ediyorsun. Bu sorunu aşmadan devam etme derim.

Bak bir tavsiye vereyim. Qt creator, gcc ve gdb kur. Bir C projesi aç, debug mod seç. Benim yazdığım kod parçalarını yaz, kendin de bişeyler ekle. İzlemek istediğin kod satırının sol tarafına, satır numarasının yanında tıkla. Kırmızı bir nokta oluşacak, onun adı breakpoint. F5'e bas. Kod debug modda derlenip çalışmaya başlayacak ve işaretlediğin yerde duracak. Sağda Locals diye pencere göreceksin. Orada değişkenlerimiz ve o anki değerli yazar. Aşağıdaki butonlarla programı satır satır çalıştırarak değişkenlerin hangi değerleri aldığını, arkada neler döndüğünü görebilirsin. Expressions penceresine ise aynı kod yazıyormuş gibi ifadeler yazıp (misal !!d + 5) anlık değerini görebilirsin.

Debugger kullanmak öğrenirken de çok işe yarar.

007

Zaman ayırdığınız için çok teşekkür ederim.
2 kuruşluk ben EMİR VEREN 4 kuruşlukların 5 kuruşluk işlerini yaparım.

freeman

=Eşittir (değer atama)
==Eşit midir? (zaten var olan bir değeri sorgulama)
Good morning and welcome to the Black Mesa Transit System. This automated train is provided for the security and convenience of the Black Mesa Research Facility personnel.

007

Önceden de demiştiniz hocam şimdi kuracam.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 16 Ekim 2018 - 22:00:20

freeman

Hocam çok teşekkür ederim.
2 kuruşluk ben EMİR VEREN 4 kuruşlukların 5 kuruşluk işlerini yaparım.