MATLAB में & && के बीच क्या अंतर है?


जवाबों:


93

एकल एम्परसेंड तार्किक और ऑपरेटर है। डबल एम्परसेंड और& फिर से एक तार्किक और ऑपरेटर है जो शॉर्ट-सर्कुलेटिंग व्यवहार को नियोजित करता है। शॉर्ट-सर्कुलेटिंग का अर्थ केवल दूसरा ऑपरेंड (दाएं हाथ की ओर) का मूल्यांकन केवल तब होता है जब परिणाम पहले ऑपरेंड (बाएं हाथ की ओर) द्वारा पूरी तरह से निर्धारित नहीं किया जाता है

ए और बी (ए और बी का मूल्यांकन किया जाता है)

A && B (B केवल तभी मूल्यांकन किया जाता है यदि A सत्य है)


75
कैविएट पर: &सरणियों पर काम कर सकता है, लेकिन &&केवल स्केलर पर काम कर सकता है।
gnovice

साइड नोट: 15 वर्षों के बाद मतलाब के साथ काम करने के बाद लगभग मैं हमेशा 'और' का उपयोग करता हूं और इसने मुझे गधे में कभी नहीं काटा है। OTOH, मैं ऐसे कई लोगों को जानता हूँ जो '&&' का उपयोग करके परेशान हो जाते हैं क्योंकि उन्हें यह याद रखना होगा कि यह सार्वभौमिक नहीं है (हाँ मुझे पता है कि 'और' उतना कुशल नहीं है क्योंकि यह शॉर्ट सर्किट नहीं करता है, लेकिन मैं बहुत अधिक कभी नहीं डेज़ी करता हूँ- श्रृंखला मेरे ऑपरेंड इसलिए आजकल बचत नगण्य हैं)।
eric

7
@neuronet यह वास्तव में दक्षता के बारे में नहीं है, अधिक यह एक निर्माण की अनुमति देता है जहां पहली अभिव्यक्ति एक ऐसी स्थिति की गारंटी देती है जिसके बिना दूसरी अभिव्यक्ति एक रन-टाइम त्रुटि का कारण हो सकती है। जैसे d != 0 && 1/dबनाम d !=0 & 1/d- पहला शून्य से कोई विभाजन की गारंटी देता है, दूसरा नहीं।
फ्रेजर

2
यह उत्तर अधूरा और गलत है। &एक ifबयान में अगर शॉर्ट-सर्किट करता है । और &&अदिश इनपुट्स लेता है। @ नीचे लोरेन का जवाब सही है।
क्राइस लुएंगो

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

35

&&और ||अदिश इनपुट और शॉर्ट-सर्किट हमेशा लें। |और &सरणी इनपुट्स और शॉर्ट-सर्किट केवल यदि / जबकि बयानों में लेते हैं। असाइनमेंट के लिए, बाद वाले शॉर्ट-सर्किट नहीं करते हैं।

देखें इन दस्तावेज़ पृष्ठों अधिक जानकारी के लिए।


1
क्या आपके पास कोई जानकारी है जिस पर Matlab संस्करणों शॉर्टकट &और |यदि / जबकि बयानों में? R2012b और R2014a में ऐसा नहीं है।
टिम

@ किसी भी विचार के लिए कि उन्होंने केवल स्केलर के साथ काम करने के लिए डिज़ाइन क्यों किया? यह अजीब लगता है ...
मारी

@neuronet: यदि आप सरणियों पर काम करते हैं तो आप शॉर्ट-सर्किट नहीं कर सकते।
क्राइस लुआंगो

17

जैसा कि पहले ही दूसरों ने उल्लेख किया है, &एक तार्किक और ऑपरेटर है और &&एक शॉर्ट-सर्किट और ऑपरेटर है । वे अलग-अलग तरीकों से मूल्यांकन करते हैं कि वे एरेज़ या स्केलर पर काम करते हैं या नहीं।

  • &(और ऑपरेटर) और |(या ऑपरेटर) तत्व-वार फैशन में सरणियों पर काम कर सकते हैं ।
  • &&और ||शॉर्ट-सर्किट संस्करण हैं जिनके लिए दूसरे ऑपरेंड का मूल्यांकन केवल तब किया जाता है जब परिणाम पहले ऑपरेंड द्वारा पूरी तरह से निर्धारित नहीं किया जाता है। ये केवल स्केलर पर काम कर सकते हैं , न कि सरणियाँ।

8

दोनों तार्किक और संचालन हैं। हालांकि && एक "शॉर्ट-सर्किट" ऑपरेटर है। MATLAB डॉक्स से:

वे शॉर्ट-सर्किट ऑपरेटर हैं, जिसमें वे अपने दूसरे ऑपरेंड का मूल्यांकन करते हैं, जब परिणाम पहले ऑपरेंड द्वारा पूरी तरह से निर्धारित नहीं किया जाता है।

अधिक देखें यहाँ


6

अन्य भाषाओं के समान, &एक तार्किक बिटवाइज़ ऑपरेटर है, जबकि &&एक तार्किक ऑपरेशन है।

उदाहरण के लिए (मेरे वाक्यविन्यास को क्षमा करें)।

अगर..

A = [True True False True]
B = False
A & B = [False False False False]

..or ..

B = True
A & B = [True True False True]

के लिए &&, सही संकार्य केवल गणना की जाती है, तो बाईं संकार्य सच है, और परिणाम एक भी बूलियन मान है।

x = (b ~= 0) && (a/b > 18.5)

उम्मीद है कि स्पष्ट है।


3
यह थोड़ा समझदार नहीं है, यह तत्व-वार है।
संकट लुएंगो

3
क्या मैं ठीक-ठीक १० साल बाद आया था? Ker
एरिक कर्बर

खैर, इस सवाल को अब तक ~ 115k बार देखा जा चुका है, जिसका अर्थ है कि बहुत सारे लोगों ने यहाँ गलत जानकारी दी है। इनमें से कई उत्तर अधूरे हैं या उनमें गलत जानकारी है। आपको बस अपना उत्तर ठीक करने या इसे हटाने की आवश्यकता है। BTW: bitandMATLAB में बिटवाइज़ लॉजिकल और ऑपरेटर है।
संकट लुएंगो


2

सशर्त कथन (IF, WHILE, आदि) में उपयोग के लिए तर्क का निर्माण करते समय अंगूठे का एक अच्छा नियम हमेशा && / का उपयोग करना है || रूपों, जब तक वहाँ एक बहुत अच्छा कारण नहीं है। इसके दो कारण हैं ...

  1. जैसा कि अन्य लोगों ने उल्लेख किया है, && / / का लघु परिचलन व्यवहार || अधिकांश सी-लाइक भाषाओं के समान है। उस समानता / परिचित को आमतौर पर इसके पक्ष में एक बिंदु माना जाता है।
  2. && या का उपयोग करना || फ़ॉर्म आपको वेक्टर तर्कों के लिए अपना इरादा तय करने के लिए पूर्ण कोड लिखने के लिए मजबूर करता है। जब a = [१ ० ० १] और बी = [० १ ० १], क्या एक & b सही या गलत है? मैं MATLAB &, के लिए नियम याद नहीं कर सकते? ज्यादातर लोग नहीं कर सकते। दूसरी तरफ, यदि आप && या का उपयोग करते हैं, तो आप शर्त को हल करने के लिए "पूर्ण" कोड लिखने के लिए तैयार हैं।

ऐसा करने के बजाय MATLAB के वैक्टर में & & | के संकल्प पर निर्भर होने के बजाय, कोड की ओर जाता है जो थोड़ा अधिक क्रिया है, लेकिन बहुत सुरक्षित और बनाए रखने में आसान है।


1
+1, लेकिन यह ध्यान दिया जाना चाहिए कि आपका जवाब केवल मामलों में जहां आप पर लागू होता चाहते आपरेशन के अंतिम परिणाम अदिश किया जाना है। & | के लिए कई उपयोग हैं कहाँ && और || बेकार हैं क्योंकि वे सरणियों को वापस नहीं कर सकते हैं, उदाहरण के लिए जब फैंसी अनुक्रमण जैसे "1 और 2 के बीच सभी आर का चयन करना r((r<2)&(r<2))"।
जोनास हीडलबर्ग

अच्छा बिंदु, जोनास। जब मैंने यह लिखा था, मैं "तार्किक अनुक्रमणिका" (MATLAB शब्द "फैंसी अनुक्रमणिका" के लिए नहीं, बल्कि मैं कंडीशंस के बारे में सोच रहा था। मैंने अपनी पोस्ट का पहला वाक्य बदल दिया है। याद दिलाने के लिए शुक्रिया!
बॉब गिलमोर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.