2012-06-08 20 views
8

[यह अजीब यह मौजूद नहीं है लगता है, इसलिए अग्रिम अगर यह डुप्लिकेट है, में क्षमा याचना]तार्किक समानता

मैं सी में तार्किक समानता दूसरे शब्दों में के लिए परीक्षण करना चाहते हैं, मैं दो कि क्या जानना चाहते हैं मूल्य दोनों बराबर होंगे यदि दोनों को तार्किक अभिव्यक्तियों से जुड़े सामान्य तरीके से परिवर्तित किया गया था।

C99 में, मुझे लगता

(bool)a == (bool)b 

देता है कि मैं क्या चाहता हूँ। क्या वो सही है? पारंपरिक सी में इसे लिखने का सामान्य तरीका क्या है?

if ((a == 0) == (b == 0)) 

या

if (!!a == !!b) 

!!a के बाद से 1 का मूल्यांकन करता है, तो एक अशून्य है और 0 अन्यथा:

+2

सादा पारंपरिक सी में बूल प्रकार नहीं है। –

+4

गलती, दोस्तों? आप क्यू पढ़ते हैं? मुझे पता है पारंपरिक सी में बूल नहीं है। यही कारण है कि मैं पूछ रहा हूं कि पारंपरिक सी में आप कैसे लिखेंगे, अलस, '==' '1 == 2' के लिए झूठी वापसी करेगा, जो मैं नहीं चाहता हूं। –

उत्तर

10

आप आमतौर पर इस को देखते हैं।

आशा है कि इससे मदद मिलती है!

1

पारंपरिक सी में कोई (bool) नहीं है। सही/गलत int एस का उपयोग करके संभाला जाता है। आप

a ? b : !b 
+1

सी 99 में एक बूल है। –

+0

पिछले 13 वर्षों से 'बूल 'रहा है ... –

+0

मेरा मतलब पारंपरिक सी, सी 99 नहीं था। –

6

सी में शून्य के साथ बुलियन समानता की जांच कर सकते हैं, शून्य शून्य है। यदि आप किसी भी मूल्य को अपने बुलियन समकक्ष में परिवर्तित करना चाहते हैं, तो मानक तरीका (ठीक है, सिवाय इसके कि इसकी आवश्यकता कभी भी नहीं है) के साथ एक अभिव्यक्ति को उपसर्ग करना है, जैसा कि !!a में है। आपकी अभिव्यक्ति के मामले में, !!a == !!b !a == !b

+0

जब * इसकी आवश्यकता है? –

+0

जब ए और बी में अलग-अलग गैर-शून्य मान हो सकते हैं, और आप जानना चाहते हैं कि वे बाद में नियंत्रण-प्रवाह परीक्षण, जैसे कि 'if() 'में उसी बूलियन का मूल्यांकन करेंगे या नहीं। –

+0

ओह, क्षमा करें, अपना मूल उत्तर गलत तरीके से पढ़ें। –

2

करने के लिए सरल किया जा सकता है पूर्व C99 सी में, tradiitional, करने के लिए "डाली bool करने के लिए" मुहावरेदार रास्ता !! के साथ है।

संबंधित मुद्दे