PHP और(ampersand, bitwise और) ऑपरेटर को समझना




operators bit-manipulation (4)

मैं अक्सर अपने कोड में ($var & 1) का उपयोग करता हूं, जो सही होता है यदि $var एक विषम संख्या है और झूठी है तो यह भी एक संख्या है।

लेकिन वास्तव में "और" क्या करता है?


अन्य उत्तरों के अलावा, यह ध्यान देने योग्य है

if(func1() && func2())

केवल func2() कॉल करेगा अगर func1() सत्य ("आलसी मूल्यांकन") देता है, जबकि

if(func1() & func2())

दोनों कार्यों को ध्यान में रखेगा, लेकिन दोनों के लिए सच्चाई सारणी समान होगी (माना जाता है कि वे बुलियन लौटते हैं)।

thomasrutter अंक (नीचे टिप्पणियों में) कि आप शायद बाद में अभ्यास में नहीं करना चाहिए। (A & B) में वही सत्यता नहीं होगी (A & B) (A && B) , खासकर जब A और B पूर्णांक हों। उदाहरण के लिए, यदि ए = 1 और बी = 2 (सच्चाई दोनों), ए और बी गलत होंगे, जबकि ए एंड बी बी सत्य है। इसके अलावा, एक और डेवलपर सोच सकता है कि यह दो एम्पर्सेंड्स के लिए एक टाइपो और 'सही' है।


और बाइनरी है and । यदि आपके पास बाइनरी मान है, और आप and एक और बाइनरी मान के साथ, तो परिणाम थोड़ा सा and दोनों का होगा। एक उदाहरण:

  01101010
& 01011001
= 01001000

सही बिट या तो 1 है (और उस स्थिति में संख्या एक विषम संख्या है) या यह 0 है, जिस स्थिति में संख्या भी है। यदि आप & 1 के साथ कोई संख्या है, तो आप केवल कम से कम महत्वपूर्ण बिट देखते हैं, और यदि चेक 1 या 0 है तो चेक करता है। जैसा कि अन्य ने उल्लेख किया है, बिट्स ऑपरेटरों को यह जानकारी के लिए देखें कि वे कैसे काम करते हैं।


बिटवाई और PHP के बारे में जानना भी दिलचस्प है:

/**
 * Regular
 */
echo (true && true); // 1
echo (true && false); // nothing

echo (true || false); // 1
echo (false || false); // nothing

echo (true xor false); // 1
echo (false xor false); // nothing

/**
 * Bitwise
 */
echo (true & true); // 1
echo (true & false); // 0

echo (true | false); // 1
echo (false | false); // 0

echo (true ^ false); // 1
echo (false ^ false); // 0

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

($var % 2) /* instead of */ ($var & 1)

क्योंकि यह इरादा स्पष्ट करता है कि आप यह जांच रहे हैं कि संख्या विषम है (दो से विभाजित नहीं है), और यह अधिक सामान्य है, इसलिए आप उसी तरह ($ var% 3) का उपयोग कर सकते हैं और यह किसी भी एन के लिए कैसे काम करता है इसे कम कर सकते हैं।





bitwise-operators