2011-03-28 14 views

उत्तर

7

i=x<y<z;, i=(x<y)<z, जो बारी में i=1<z के रूप में व्याख्या हो जाता है, जो 1.

+0

की व्याख्या की है, कम से कम जीसीसी (शायद अन्य कंपाइलर भी) चेतावनी प्रिंट करते हैं, चेतावनी: अगर चेतावनी: 'एक्स <= वाई < = जेड 'उनके गणितीय अर्थ नहीं है' – Saytonurn

0

इसका कारण यह है अपने कोड का मूल्यांकन है:

void main() 
{ 
    int x=10,y=20,z=5,i; 
    i=((x<y)<z); //(x<y) = true = 1, (1 < 5) = true 
    printf("%d",i); 
} 
+0

कैसे आप कोड बदल सकते हैं और मूल्यांकन के बारे में बात कर सकते हैं? – Sadique

+0

मैंने यह वर्णन करने के लिए ब्रेसिज़ सेट किए हैं कि कैसे संकलक ने कोड –

0

क्या उत्पादन तुमने किया था पर मूल्यांकन करता है के रूप में व्याख्या हो जाता है चाहते हैं?

सी में,

i = 2 < 3; //i == 1. 
i = 4 < 3; //i == 0. 

हालत गलत का आकलन करते हैं, तो दिए गए मान 0 और 1 अन्यथा है।
इसके अलावा, x < y < z का मूल्यांकन किया जाएगा ((x < y) < z)।

2

10 20 से कम है, जिसके परिणामस्वरूप 1, और 1 5 से कम है, जिसके परिणामस्वरूप 1. सी चेन रिलेशनल ऑपरेटरों को कुछ अन्य भाषाओं के रूप में नहीं करता है।

0
x<y // 1 as (10 < 20) will return 1 
result of(x<y)<z // 1 as (1<5) will return 1 
1

यह संचालित इस प्रकार है: < के बाद से एक तार्किक अभिव्यक्ति है, x<y यानी 10<20 सच यानी 1. है तो यह 1<z यानी 1<5 जो फिर सच यानी 1 जो i को असाइन किया गया है हो जाता है। तो i है 1.

0

सी ++ इस तरह बहु-अंश तुलना का समर्थन नहीं करता है।

x < y < z 

रूप

(x < y) < z 

व्याख्या की है या कि, अगर x < y निर्धारित करते हैं, फिर देखें कि वह कि बूलियनz कम से कम है।

पर कुछ चर्चा क्यों हैover at the software engineering StackExchange है।

जब आप पाते हैं अपने आप को ऐसा करने की कोशिश कर रहा है, इसके बजाय आप दो अलग-अलग तुलना एक बूलियन से जुड़े हुए के रूप में यह लिखने के लिए की जरूरत है:

(x < y) && (y < z)