2010-09-13 21 views
16

किसी को पता है क्यों:तार्किक या बिटवाइज़ OR ऑपरेटर बनाम ऑपरेटर

if (false && true || true) { 
     System.out.println("True"); 
} else { 
     System.out.println("False"); 
} 

प्रिंट "सच"

if (false && true | true) { 
      System.out.println("True"); 
    } else { 
      System.out.println("False"); 
    } 

प्रिंट "झूठी"

+4

कॉलिन द्वारा यहां एक सही जवाब दिया गया था जो पागल की तरह नीचे गिर गया। मैं वही भाग्य नहीं चाहता हूं इसलिए मैं इसे एक टिप्पणी के रूप में पोस्ट करूंगा: & और | एक बुलियन संदर्भ में बिटवाई ऑपरेटर नहीं हैं, लेकिन उत्सुक बुलियन ऑपरेटर (कोई शॉर्ट-सर्किट नहीं है, दोनों पक्षों का हमेशा मूल्यांकन किया जाएगा)। इसे देखें: http://en.wikipedia.org/wiki/Short-circuit_evaluation#Support_in_common_programming_languages ​​ –

+1

अजीब बात यह है कि मुझे कोई सूर्य आधिकारिक दस्तावेज़ नहीं मिल रहा है जहां | और लॉजिकल ऑपरेटरों के रूप में संदर्भित किया जाता है (लेकिन यह एससीजेपी 6 परीक्षा का हिस्सा है) –

+0

@seanizer: यहां अभी भी एक सही उत्तर है। (उनमें से दो, वास्तव में।) :-) चाहे वे थोड़ा सा हों या बुलियन पर नहीं, वास्तव में बिंदु * यहां * नहीं है, '|' उच्च प्राथमिकता है और इसीलिए ओपी व्यवहार को देख रहा है/वह पूछ रही है। –

उत्तर

16

क्योंकि operator precedence की। आपके पहले उदाहरण में, && पहले किया जाता है, और फिर ||। लेकिन bitwise या उच्च प्राथमिकता है, तो आपके दूसरे उदाहरण में | पहले किया जाता है, तो &&

+4

क्या डाउनवॉटर कुछ उपयोगी प्रतिक्रिया प्रदान करने की देखभाल करेगा? –

20

पहले मामले में & & की तुलना में अधिक प्राथमिकता है || ऑपरेटर इसलिए अभिव्यक्ति का मूल्यांकन if ((false && true) || true) के रूप में किया जाता है और आप सच हो जाते हैं।

दूसरे मामले में bitwise या ऑपरेटर की & & से अधिक प्राथमिकता है इसलिए अभिव्यक्ति का मूल्यांकन if (false && (true | true)) के रूप में किया जाता है और आपको गलत लगता है।

+0

यह इस संदर्भ में थोड़ा सा ऑपरेटर नहीं है। पूरी अभिव्यक्ति अगर (झूठी && (सत्य | सत्य)) का मूल्यांकन किया जाएगा। कुछ प्रमाण (दोनों बयानों) चाहते हैं? –

+1

@ पावेल: चाहे यह थोड़ा सा है या नहीं, वास्तव में ओपी के प्रश्न के संदर्भ में कोई फर्क नहीं पड़ता। '|' अभी भी '&&' से अधिक प्राथमिकता लेता है, और इसलिए पहला ऑपरेशन सत्य है सत्य 'जो' सत्य 'है, जो तब' झूठी और सत्य 'में फ़ीड करता है, जो निश्चित रूप से' झूठा 'है। बूलियन पर लागू होने पर '|' की पूरी बात यह है कि बिंदु के बगल में है और ज्यादातर किसी भी मामले में अर्थपूर्ण (थोड़ा सा तार्किक ऑपरेटर केवल एक बिट पर लागू होता है - जो कि 'बूलियन' अवधारणा है - एक है ... तार्किक ऑपरेटर!)। :-) –

+0

&& और दोनों एक बूलियन संदर्भ में बिटवाई और दोनों तार्किक हैं, लेकिन && (और | –

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