2011-06-21 5 views
5

मेरे स्वयं को थोड़ा उलझन में लेना।Arduino और Bitwise, अप्रत्याशित परिणाम

मैं परीक्षण करना चाहता हूं कि बिट्स (3 बिट्स) का एक सेट एक निश्चित पद में थोड़ा सा है या नहीं।

if (B110 & B010 == B010) 

(B110 संख्या की जांच करने जा रहा है, B010 बिट मैं अगर वहाँ देखना चाहते हैं)

उपरोक्त कोड, मुझे न जताए बाहर की उम्मीद आ दोनों B110 सच है और B101 है सच। मुझे पूरा यकीन है कि मुझे मास्क B010 के साथ परीक्षण करने के लिए & (और) का उपयोग करने की आवश्यकता है।

मेरी समझ यह है कि बी 110 & बी010 बी010 के बराबर होगा और बी 101 & बी010 बी000 के बराबर होगा। लेकिन मेरा अगर कथन दोनों परीक्षण बिट्स के साथ चलाया जाता है?

मैं एक Arduino में कोडिंग कर रहा हूं, मुझे यकीन है कि यह मेरी ओर से एक साधारण गलतफहमी है लेकिन यह सुनिश्चित नहीं है कि कहां है।

+1

मैं मदद नहीं कर सका लेकिन पून पर हंस सकता था। – fuzz

उत्तर

12

if ((B110 & B010) == B010)

प्रयास करें क्षण यह if (B110 & (B010 == B010)) के रूप में चल रहा है जो हमेशा सच हो जाएगा पर। !

this table के रूप में दिखाता है, == और =&, तुलना में एक उच्च पूर्वता है | आदि

+0

हां, मैं जो कहने वाला था, मैं केवल इतना जोड़ सकता हूं कि यह सी के डिजाइनरों की पूरी तरह से पागल है कि आपने == से अधिक मजबूत और मजबूत नहीं किया है, जिससे हमें पर्याप्त कोड के साथ हमारे कोड को कूड़ेदान के लिए कूड़े हुए हैं ताकि यह लिसपैस जैसा दिख सके। –

+0

@ ड्रेन बिल्कुल;) अंगूठे के सामान्य नियम के रूप में, यदि मैं एक IF I * हमेशा गणना में गणना कर रहा हूं तो गणना को अपने स्वयं के कोष्ठक में डाल दें। – Majenko

+2

यदि कोई संदेह है, तो मैं अतिरिक्त माता-पिता का उपयोग करता हूं। मैं ऑपरेटरों की प्राथमिकता को नहीं जानता, लेकिन मैं जानता हूं कि संकलक माता-पिता का पालन करेगा। – blalor

3

"== B010" वास्तव में इस परीक्षण में अनावश्यक है। सी में, 0 "झूठी" का प्रतिनिधित्व करता है, जबकि किसी भी nonzero मान को "सत्य" माना जाता है। B110 & B010 (या उस बिट सेट के साथ कोई अन्य मूल्य) B010 लौटाएगा, जो 0 के बराबर नहीं है, इसलिए परीक्षण सफल होता है।