निम्न कोड स्निपेट के लिए मुझे आउटपुट 1
के रूप में मिलता है। मैं जानना चाहता हूं कि यह कैसे आया?ऑपरेटर प्राथमिकता - अभिव्यक्ति मूल्यांकन
void main()
{
int x=10,y=20,z=5,i;
i=x<y<z;
printf("%d",i);
}
निम्न कोड स्निपेट के लिए मुझे आउटपुट 1
के रूप में मिलता है। मैं जानना चाहता हूं कि यह कैसे आया?ऑपरेटर प्राथमिकता - अभिव्यक्ति मूल्यांकन
void main()
{
int x=10,y=20,z=5,i;
i=x<y<z;
printf("%d",i);
}
i=x<y<z;
, i=(x<y)<z
, जो बारी में i=1<z
के रूप में व्याख्या हो जाता है, जो 1.
इसका कारण यह है अपने कोड का मूल्यांकन है:
void main()
{
int x=10,y=20,z=5,i;
i=((x<y)<z); //(x<y) = true = 1, (1 < 5) = true
printf("%d",i);
}
कैसे आप कोड बदल सकते हैं और मूल्यांकन के बारे में बात कर सकते हैं? – Sadique
मैंने यह वर्णन करने के लिए ब्रेसिज़ सेट किए हैं कि कैसे संकलक ने कोड –
क्या उत्पादन तुमने किया था पर मूल्यांकन करता है के रूप में व्याख्या हो जाता है चाहते हैं?
सी में,
i = 2 < 3; //i == 1.
i = 4 < 3; //i == 0.
हालत गलत का आकलन करते हैं, तो दिए गए मान 0 और 1 अन्यथा है।
इसके अलावा, x < y < z का मूल्यांकन किया जाएगा ((x < y) < z)।
10 20 से कम है, जिसके परिणामस्वरूप 1, और 1 5 से कम है, जिसके परिणामस्वरूप 1. सी चेन रिलेशनल ऑपरेटरों को कुछ अन्य भाषाओं के रूप में नहीं करता है।
x<y // 1 as (10 < 20) will return 1
result of(x<y)<z // 1 as (1<5) will return 1
यह संचालित इस प्रकार है: <
के बाद से एक तार्किक अभिव्यक्ति है, x<y
यानी 10<20
सच यानी 1. है तो यह 1<z
यानी 1<5
जो फिर सच यानी 1 जो i
को असाइन किया गया है हो जाता है। तो i
है 1.
सी ++ इस तरह बहु-अंश तुलना का समर्थन नहीं करता है।
x < y < z
रूप
(x < y) < z
व्याख्या की है या कि, अगर x < y
निर्धारित करते हैं, फिर देखें कि वह कि बूलियनz
कम से कम है।
पर कुछ चर्चा क्यों हैover at the software engineering StackExchange है।
जब आप पाते हैं अपने आप को ऐसा करने की कोशिश कर रहा है, इसके बजाय आप दो अलग-अलग तुलना एक बूलियन से जुड़े हुए के रूप में यह लिखने के लिए की जरूरत है:
(x < y) && (y < z)
की व्याख्या की है, कम से कम जीसीसी (शायद अन्य कंपाइलर भी) चेतावनी प्रिंट करते हैं, चेतावनी: अगर चेतावनी: 'एक्स <= वाई < = जेड 'उनके गणितीय अर्थ नहीं है' – Saytonurn