Aralarındaki fark nedir (x & y, x && y) ve c ++ 'da "&" ne anlama geliyor?


cevap 1:

&&, boole AND operatörüdür. İşte doğruluk tablosu:

~ | x
y | 0 1
------------
0 | 0 0
1 | 0 1

Diğer bir deyişle, operatörün her iki tarafındaki tamsayı değerleri (x ve y) '1' ise, 1 döndürür, aksi takdirde '0' döndürür.

Başlangıçta tamsayı değişkenleri için tasarlandığından (C'nin boole türü yoktur) 0 veya 1 dışındaki değerlerle karşılaşıldığında da bir şeyler yapması gerekir. Ne yaptığından emin değilim (sonucun C standardında tanımsız bırakıldığına inanıyorum) ama bunun kolay bir yolu var: her zaman karşılaştırdığınız değişkenlerin sadece '0' veya '1 değerlerini aldığından emin olun '.

& bitsel VE operatörüdür. Karşılık gelen her biti bir çift tamsayı değişkeninde alır (tekrar x ve y) ve yukarıda tanımlanan işlemi gerçekleştirir ve başka bir tamsayı döndürür.


cevap 2:

Tek ve işareti (&) bitsel bir operatördür. Çift ve işareti (&&) mantıklı bir operatördür.

Mantıksal operatörün anlaşılması daha kolaydır. Hem x hem de y kendiliğinden true değerini değerlendirirse, temel olarak true Boole değerini döndürür. Aksi takdirde, yanlış döndürür.

Bitsel operatör benzer bir şey yapar, ancak bunu yavaş yavaş yapıyor.

Diyelim ki x = 7 ve y = 11 olsun. Sonra ikili gösterimler aşağıdaki gibidir:

x = 0000: 0111

y = 0000: 1011

Biraz & işlemi yaparak bitiriyoruz, aşağıdaki sonucu elde ediyoruz:

x & y = 0000: 0011 = 3

İlk kırıntı tamamen sıfırdır. Böylece, tüm sıfırlar (0 & 0 = 0) kalmaya devam eder. Alt kemikten geçerek bunu elde ederiz:

Dördüncü bit (x [3] ve y [3]): 0 & 1 = 0

Üçüncü bit (x [2] ve y [2]): 1 & 0 = 0

İkinci bit (x [1] & y [1]): 1 & 1 = 1

İlk bit (x [0] & y [0]): 1 & 1 = 1.

Mantıksal işleç için, değişken içindeki herhangi bir bit sıfırdan farklıysa, bu genellikle değişkenin tamamının true olarak değerlendirildiği ve değerlendirmenin oradan tek bir değerle gittiği anlamına gelir. Bitsel operatör, her bite kendi hesaplaması olarak bakar.