2011-01-16 17 views
13

मैंने निम्नलिखित स्टैक ओवरफ़्लो प्रश्न पढ़े हैं, और मैं bitwise और तार्किक के बीच अंतर को समझता हूं।मुझे थोड़ा सा ऑपरेटर कब उपयोग करना चाहिए?

हालांकि, उनमें से कोई भी बताते हैं जब मैं बिटवाइज़ या तार्किक उपयोग करना चाहिए।

लॉजिकल वाले के बजाय मुझे बिटवाई ऑपरेटरों का उपयोग क्यों करना चाहिए और इसके विपरीत?

मुझे किस स्थिति में थोड़ा सा तुलना करने की आवश्यकता है?

मैं मतभेदों के बारे में नहीं पूछ रहा हूं, लेकिन जब आप bitwise ऑपरेटरों का उपयोग करने की आवश्यकता है तो मैं स्थिति पूछ रहा हूं।

+2

एक गणितीय कार्य है, दूसरा एक बुलियन ऑपरेटर है। – mario

+0

एक उपयोग अजीब संख्या को ढूंढ सकता है: '$ संख्या = [1, 2, 3, 4, 5]; foreach ($ num के रूप में $ संख्या) {अगर ($ num और 1) {echo $ num। "एक विषम संख्या है!
"; }}; ' – Ahmad

उत्तर

12

बिटवाइस | और & और तार्किक || और &&पूरी तरह से अलग हैं।

बिटवाई ऑपरेटर बिट्स पर दो नंबरों के संचालन करते हैं और परिणाम लौटाते हैं। इसका मतलब है कि यह हाँ या कोई बात नहीं है। यदि उनका सशर्त बयान में उपयोग किया जा रहा है, तो वे अक्सर तार्किक तुलना के हिस्से के रूप में उपयोग किए जाते हैं। उदाहरण के लिए:

if ($x & 2 == 2) { 
    // The 2^1 bit is set in the number $x 
} 

लॉजिकल ऑपरेटर दो (या अधिक) स्थितियों/अभिव्यक्तियों की तुलना करते हैं और सत्य या गलत लौटते हैं। आप उन्हें सशर्त बयानों में सबसे अधिक उपयोग करते हैं, जैसे if और while। उदाहरण के लिए:

if ($either_this || $or_this) { 
    // Either expression was true 
} 
3

बिट नंबर ऑपरेटर उपयोगी होते हैं जब किसी संख्या के बिट्स में हेरफेर करते हैं। here देखें। अन्यथा आपको लॉजिकल ऑपरेटरों का उपयोग करना चाहिए। इसके अलावा तार्किक ऑपरेटरों को संक्षिप्त सर्किट किया जाता है। उदाहरण के लिए, यदि आपके पास a && b और afalse है, b का मूल्यांकन नहीं किया गया है।

अस्वीकरण: मैं Java पृष्ठभूमि से आ रहा हूं, लेकिन मुझे लगता है कि PHP में यह वही है।

5

ज्यादातर मामलों में, आप शायद लॉजिकल ऑपरेटरों का उपयोग करना चाहेंगे। इन्हें लॉजिकल स्थितियों के संयोजन के लिए उपयोग किया जाता है, आमतौर पर प्रोग्राम प्रवाह को नियंत्रित करने के लिए, उदाहरण के लिए ($isAlive && $wantsToEat)

बिट्सवे ऑपरेटरों का उपयोग तब किया जाता है जब आप पूर्णांक के अंतर्निहित बाइनरी प्रस्तुतियों पर बिट-बाय-बिट आधार पर संचालन करना चाहते हैं। जैसे (5 & 3) == 7। जैसा कि अन्य ने सुझाव दिया है, आमतौर पर PHP में लिखे जाने वाले आवेदन के प्रकार में बहुत अधिक कॉल नहीं होती है (हालांकि निम्न स्तर की भाषाओं में सी है, जैसे सी)।

1

वे दो बहुत अलग ऑपरेटरों हैं।

जब आप दो शर्तों को एक साथ सच करना चाहते हैं, तो आप लॉजिकल && का उपयोग करते हैं।उदाहरण के लिए, मैं केवल "जन्मदिन मुबारक" प्रिंट करना चाहता हूं अगर व्यक्ति का जन्मदिन आज & & उनके पास खाते में पैसा है। इसका उपयोग तब भी किया जाता है जब भी हम दो या दो से अधिक स्थितियों की संरचना करना चाहते हैं, अधिकांशतः अगर बयान और लूप स्थितियां (हालांकि विशेष रूप से नहीं)।

जब आप बिटवाई ऑपरेशंस करना चाहते हैं (जो दिन-प्रति-दिन PHP प्रोग्रामिंग अधिक दुर्लभ है), तो आप bitwise & का उपयोग करें। यह बहुत दुर्लभ है, और आप बिटवाई मास्किंग कर रहे हैं (मुझे संदेह है हालांकि), तो आप केवल एक परिणाम चाहते हैं कि दोनों पूर्णांक प्रतिनिधित्व करते हैं, इस मामले में आप newAttribute = attribute1 & attribute2; कह सकते हैं।

0

ठीक है, $x = (false && some_function()); है, तो $x का मान some_function() पर कॉल किए बिना सेट किया जाएगा क्योंकि पहला मान गलत था।

लेकिन अगर आपको उस समारोह को वैसे भी कॉल करने की आवश्यकता है तो क्या होगा? $x = (false & some_function()); का प्रयोग करें।

दूसरे शब्दों में, & अधिक संसाधन & & से, सिर्फ इसलिए कि & & का उपयोग करता है उन्हें जांच करने के लिए सभी मूल्यों के माध्यम से नहीं चलता है। यदि यह एक मान को झूठा मानता है, तो यह अन्य मानों को देखकर इसे वापस कर देगा।

और तार्किक आपरेशनों में, && ऑपरेटर का उपयोग के रूप में यह तार्किक आपरेशन मूल्य, जहां & और स्थापित करने के लिए एक मूल्य के प्रयोग किया जाता है एक if बयान में यह हमेशा सच वापस आ जाएगी वापस करने के लिए प्रयोग किया जाता है।

5

बिटवाईर ऑपरेटर विशेष रूप से बाइनरी मान प्रतिनिधित्व के मामले में उपयोग किए जाते हैं।

echo '0110011010' & '0101001001'; 
//0100001000 

तार्किक ऑपरेटरों सबसे तुलना के लिए पसंद किया और AND और XOR संचालन के मामले में बिटवाइज़ ऑपरेटर से थोड़ा तेजी से कर रहे हैं।

if(func1() && func2()) 

func1() अगर रिटर्न झूठी यह बुला func2()

if(func1() & func2()) 

दोनों कार्यों उनके लौटे मूल्यों की परवाह किए बिना फोन करेंगे परेशान नहीं करेगा।

-1

आप और अधिक जानना चाहते हैं कि यह कैसे काम करता है इस साइट की जाँच करना चाहते हैं:

http://www.bitwiseoperatorcalculator.com/

PHP से आ रहा है, मैं इसे पहले कभी उपयोग नहीं किया है, लेकिन सिर्फ मनोरंजन के लिए पढ़ने के लिए इस साइट सरल स्पष्टीकरण देता है!

18

बिटवाई कुछ अन्य चीज़ों की तरह PHP में चीजों के लिए उपयोगी है।

एक मूल्य के बारे में कैसे एक ही समय में कई राज्यों को चालू किया जा सकता है (शायद अनुमतियां)?

<?php 

# must double them like this for it to work. 
const STATE_FOO = 1; 
const STATE_BAR = 2; 
const STATE_FEZ = 4; 
const STATE_BAZ = 8; 

# set state to foo and bar 
$state = STATE_FOO | STATE_FEZ; 

echo "What's the value: $state\n"; 
echo "Is foo state on? ".(bool)($state & STATE_FOO)."\n"; 
echo "Is bar state on? ".(bool)($state & STATE_BAR)."\n"; 
echo "Is fez state on? ".(bool)($state & STATE_FEZ)."\n"; 
echo "Is baz state on? ".(bool)($state & STATE_BAZ)."\n"; 
echo "Is foo and fez state on? ".($state == (STATE_FOO | STATE_FEZ))."\n"; 
संबंधित मुद्दे