java - जावा में एक बूलियन पर एक बिटवायर ऑपरेटर का प्रभाव




boolean bitwise-operators (3)

अन्य उत्तरों में क्या शामिल है, इसके अलावा, यह ध्यान देने योग्य है कि && और || & और | से अलग प्राथमिकता है ।

प्राथमिकता तालिका से निकालें (शीर्ष पर उच्चतम प्राथमिकता के साथ)।

bitwise AND                 &
bitwise exclusive OR        ^
bitwise inclusive OR        |
logical AND                 &&
logical OR                  ||

इसका मतलब क्या है?

बिल्कुल कुछ नहीं, जब तक आप केवल या और | या केवल && और ||

लेकिन, के बाद से && amp की तुलना में अधिक सटीकता है (जैसा कि || विपरीत है, जिसमें कम प्राथमिकता है), स्वतंत्र रूप से उन्हें मिलाकर अप्रत्याशित व्यवहार हो सकता है।

तो a && b | c && d a && b | c && d a && (b | c) && d जैसा ही है,
a && b || c && d विरोध में a && b || c && d जो होगा (a && b) || (c && d) (a && b) || (c && d)

यह साबित करने के लिए कि वे समान नहीं हैं, सत्य तालिका से निकालने पर विचार करें:

a | b | c | d | (b|c) | (a&&b) | (c&&d) | a && (b|c) && d | (a&&b) || (c&&d)
F | T | T | T |   T   |   F    |    T   |         F       |        T
                                                  ^                ^
                                                  |- not the same -|

यदि आप चाहते हैं या उससे अधिक प्राथमिकता चाहते हैं, तो आप इसका उपयोग कर सकते हैं और एक साथ, लेकिन यह अनुशंसित नहीं है।

लेकिन जब भी आप अलग-अलग प्रतीकों का उपयोग करते हैं, यानी (a && b) || c प्राथमिकता को स्पष्ट करने के लिए आपको वास्तव में उन्हें ब्रैकेट में रखना चाहिए (a && b) || c (a && b) || c (प्राथमिकता को स्पष्ट करने के लिए ब्रैकेट), a && b && c (कोई ब्रैकेट आवश्यक नहीं है)।

बिटवाई ऑपरेटरों को चर की यात्रा करना चाहिए और थोड़ा सा थोड़ा सा काम करना चाहिए। पूर्णांक के मामले में, लंबे, वर्ण यह समझ में आता है। इन चरों में उनके आकार द्वारा लागू मूल्यों की पूरी श्रृंखला हो सकती है।

बुलियन के मामले में, हालांकि, एक बुलियन में केवल दो मान हो सकते हैं। 1 = सत्य या 0 = झूठा। लेकिन बुलियन का आकार परिभाषित नहीं किया गया है। यह एक बाइट के रूप में बड़ा या थोड़ा सा हो सकता है।

तो बुलियन पर थोड़ा सा ऑपरेटर का उपयोग करने का क्या प्रभाव है? क्या JVM अनिवार्य रूप से इसे सामान्य लॉजिकल ऑपरेटर में अनुवाद करता है और आगे बढ़ता है? क्या यह ऑपरेशन के उद्देश्य के लिए बूलियन को एक बिट इकाई के रूप में मानता है? या परिणाम एक बुलियन के आकार के साथ अपरिभाषित है?


ऑपरेटर और, ^, और | जब बिटैंड आदिम अभिन्न प्रकार होते हैं तो बिटवाई ऑपरेटर होते हैं। वे तार्किक ऑपरेटर होते हैं जब ऑपरेशन बूलियन होते हैं, और बाद के मामले में उनका व्यवहार निर्दिष्ट होता है। विवरण के लिए जावा भाषा विशिष्टता की धारा 15.22.2 देखें।


यहां तक ​​कि अगर यह काम करेगा तो आपको यह नहीं करना चाहिए। भाषा चश्मा केवल बिटवाई ऑपरेटरों को परिभाषित करते हैं जब दोनों ऑपरेशंस आदिम पूर्णांक प्रकार होते हैं या दोनों बूलियन प्रकार के होते हैं। मैं किसी अन्य मामले के लिए कहूंगा कि परिणाम परिभाषित नहीं किए गए हैं:

http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#5228





bitwise-operators