2012-07-23 20 views
5

Durum ifadesi böyle & & ve içerenler gibi ||, her zaman 0 veya 1 olarak değerlendirir mi? Veya gerçek durum için, 1'den başka sayılar mümkün mü? Ben soruyorum çünkü böyle bir değişken atamak istiyorum.Durum ifadeleri her zaman C cinsinden 0 veya 1 olarak değerlendirilir mi?

int a = cond1 && cond2; 

Bunun yerine aşağıdakileri yapmalı mıyım diye merak ediyordum.

int a = (cond1 && cond2)? 1:0; 
+0

asıl gereksiniminiz nedir? bu değişkeni neden atayacaksınız? –

cevap

14

mantıksal operatörler (&&, || ve !) tüm değerlendirmek 1 veya 0 birine.

C99 §6.5.13/3:

işlenenlerinden iki 0 eşit olmayan karşılaştırıldığında 1 elde eder && operatör; aksi halde 0 verir. Sonuç, int türüne sahiptir.

C99 §6.5.14/3:

işlenenlerinden ya 0 eşit olmayan karşılaştırıldığında 1 elde eder || operatör; aksi halde 0 verir. Sonuç, int türüne sahiptir.

C99 6.5.3.3/5:

kendi işlenen değeri eşit karşılaştırır eğer onun terimin değeri 0, 1 e eşit karşılaştırır eğer mantıksal DEĞİL operatörü ! sonucu 0 olan

0. Sonuç, int türüne sahiptir. İfade! E, (0 == E) ile eşdeğerdir. soldan sağa

+0

(C11'in kullanışlı bir kopyasına sahip değilim, ancak mantıksal işleçlerin belirtiminin değişmediğinden eminim.) –

0
'&&' 
    The logical-AND operator produces the value 1 if both operands have nonzero 
    values. If either operand is equal to 0, the result is 0. If the first operand of a 
    logical-AND operation is equal to 0, the second operand is not evaluated. 

'||' 
     The logical-OR operator performs an inclusive-OR operation on its operands. 
    The result is 0 if both operands have 0 values. If either operand has a nonzero 
    value, the result is 1. If the first operand of a logical-OR operation has a nonzero 
    value, the second operand is not evaluated. 

mantıksal-AND ve mantıksal-OR ifadelerin işleneninin. Birinci işlenenin değeri, işlemin sonucunu belirlemek için yeterli ise, ikinci işlenen değerlendirilmez. Buna "kısa devre değerlendirmesi" denir. İlk işlenenden sonra bir sıralama noktası vardır.

Teşekkürler, :)

+2

Ve bu soruya cevap vermiyor. –