c# - | के बीच क्या अंतर है और || या ऑपरेटर?




php operators (9)

मैंने हमेशा इस्तेमाल किया है || (दो पाइप) या अभिव्यक्तियों में, सी # और PHP दोनों में। कभी-कभी मुझे एक पाइप का उपयोग किया जाता है: | । उन दो उपयोगों के बीच क्या अंतर है? क्या एक दूसरे के ऊपर एक का उपयोग करते समय कोई चेतावनी है या वे एक दूसरे के बदले हैं?


|| (दो पाइप) आमतौर पर एक तार्किक या जबकि | (एक पाइप) एक बाइनरी है या। मेरे सिर के ऊपर से, मैं किसी भी समय अंतर नहीं सोच सकता कि अंतर एक बड़ा गॉचा होगा (जब आप किसी और चीज को परिणाम दे रहे हों)। हालांकि मुझे यकीन है कि किसी और के पास ऐसी स्थिति होगी जहां यह मायने रखता है।

संपादित करें: वाह, छह अन्य उत्तरों ने मुझे यह लिखने के लिए लिया था।


|| तार्किक या ऑपरेटर है। ऐसा लगता है जैसे आप मूल रूप से जानते हैं कि वह क्या है। इसका उपयोग सशर्त बयान जैसे कि, जबकि, इत्यादि में किया जाता है।

condition1 || condition2

यदि स्थिति 1 या शर्त 2 सत्य है तो सत्य का मूल्यांकन करता है।

| bitwise या ऑपरेटर है। इसका उपयोग दो नंबरों पर संचालित करने के लिए किया जाता है। आप व्यक्तिगत रूप से प्रत्येक संख्या के प्रत्येक बिट को देखते हैं और यदि बिट्स में से एक संख्या कम से कम संख्या में से एक है, तो परिणामी बिट 1 भी होगा। कुछ उदाहरण निम्नलिखित हैं:

A = 01010101
B = 10101010
A | B = 11111111

A = 00000001
B = 00010000
A | B = 00010001

A = 10001011
B = 00101100

A | B = 10101111

उम्मीद है कि समझ में आता है।

तो पिछले दो सवालों के जवाब देने के लिए, मैं नहीं कहूंगा कि "दो ऑपरेटरों के बीच अंतर जानने के अलावा कोई भी चेतावनी है।" वे अदला-बदली नहीं हैं क्योंकि वे दो पूरी तरह से अलग चीजें करते हैं।


उनकी गणितीय परिभाषा के अनुसार, OR और AND बाइनरी ऑपरेटरों हैं; वे एलएचएस और आरएचएस शर्तों को ध्यान में रखते हुए, समान रूप से | तथा &।

|| और जब एलएचएस स्थिति पूरी नहीं होती है तो उन्हें रोककर OR और AND ऑपरेटरों के गुणों को बदलें।


एक "bitwise या" है।

10011 बी | 01000 बी => 11011 बी

दूसरा तर्क है या।

सच या गलत => सच


एकल पाइप, |, bitwise ऑपरेटरों में से एक है।

विकिपीडिया से:

सी प्रोग्रामिंग भाषा परिवार में, bitwise या ऑपरेटर "|" है (पाइप)। दोबारा, इस ऑपरेटर को अपने बूलियन "लॉजिकल या" समकक्ष से भ्रमित नहीं होना चाहिए, जो अपने ऑपरेंड को बूलियन मानों के रूप में मानता है, और लिखा है "||" (दो पाइप)।


और - (हालत 1 और शर्त 2): दोनों मामलों की जांच करता है भले ही पहला झूठा हो

&& - (हालत 1 और कंडीशन 2): यदि मामला गलत है तो दूसरे मामले की जांच करने के लिए परेशान न करें

&& - ऑपरेटर आपके कोड को तेजी से चलाएगा, पेशेवर रूप से और शायद ही कभी इसका उपयोग किया जाता है

| - (हालत 1 | शर्त 2): केस 1 सत्य होने पर भी दोनों मामलों की जांच करता है

|| - (हालत 1 || शर्त 2): यदि कोई पहला सत्य है तो दूसरे मामले की जांच करने के लिए परेशान न हों

|| - ऑपरेटर आपके कोड को तेजी से चलाएगा, व्यावसायिक रूप से | शायद ही कभी इस्तेमाल किया जाता है


जावा में सरल उदाहरण

public class Driver {

  static int x;
  static int y;

public static void main(String[] args) 
throws Exception {

System.out.println("using double pipe");
    if(setX() || setY())
        {System.out.println("x = "+x);
        System.out.println("y = "+y);
        }



System.out.println("using single pipe");
if(setX() | setY())
    {System.out.println("x = "+x);
    System.out.println("y = "+y);
    }

}

 static boolean setX(){
      x=5;
     return true;
  }
 static boolean setY(){
      y=5;
      return true;
  }
}

आउटपुट:

using double pipe
x = 5
y = 0
using single pipe
x = 5
y = 5

द ऑपरेटर थोड़ा सा प्रदर्शन करता है या उसके दो ऑपरेंड (जिसका मतलब है कि दोनों पक्षों को झूठी वापसी के लिए झूठे मूल्यांकन करना चाहिए) जबकि || ऑपरेटर केवल दूसरे ऑपरेटर का मूल्यांकन करेगा यदि इसकी आवश्यकता है।

http://msdn.microsoft.com/en-us/library/kxszd0kx(VS.71).aspx

http://msdn.microsoft.com/en-us/library/6373h346(VS.71).aspx


&& ऑपरेटर की तरह, डबल ऑपरेटर एक "शॉर्ट-सर्किट" ऑपरेटर है।

उदाहरण के लिए:

if(condition1 || condition2 || condition3)

यदि condition1 सत्य है, तो स्थिति 2 और 3 की जांच नहीं की जाएगी।

if(condition1 | condition2 | condition3)

यह शर्तों 2 और 3 की जांच करेगा, भले ही 1 पहले से ही सत्य हो। चूंकि आपकी परिस्थितियां काफी महंगा कार्य हो सकती हैं, इसलिए आप उनका उपयोग करके अच्छा प्रदर्शन बढ़ा सकते हैं।

एक बड़ी चेतावनी, नल संदर्भ या इसी तरह की समस्याएं हैं। उदाहरण के लिए:

if(class != null && class.someVar < 20)

यदि कक्षा शून्य है, तो if-statement class != null बाद रुक जाएगा class != null गलत है। यदि आप केवल उपयोग करते हैं, तो यह class.someVar को जांचने का प्रयास करेगा और आपको एक अच्छा NullReferenceException मिल जाएगा। ऑर-ऑपरेटर के साथ जो कि बहुत अधिक जाल नहीं हो सकता है क्योंकि यह असंभव है कि आप कुछ खराब कर देते हैं, लेकिन यह ध्यान में रखना कुछ है।

कोई भी कभी एकल & या | का उपयोग नहीं करता है ऑपरेटर हालांकि, जब तक कि आपके पास कोई डिज़ाइन न हो, जहां प्रत्येक शर्त एक ऐसा फ़ंक्शन है जिसे निष्पादित किया जाना है। एक डिजाइन गंध की तरह लगता है, लेकिन कभी-कभी (शायद ही कभी) यह सामान करने का एक साफ तरीका है। & ऑपरेटर "इन 3 कार्यों को चलाता है, और यदि उनमें से कोई झूठा लौटाता है, तो अन्य ब्लॉक निष्पादित करें", जबकि | "अगर कोई भी झूठी वापसी नहीं करता है तो केवल अन्य ब्लॉक चलाता है" - उपयोगी हो सकता है, लेकिन जैसा कि कहा जाता है, अक्सर यह एक डिजाइन गंध है।

| का दूसरा उपयोग है और ऑपरेटर हालांकि: बिटवाई ऑपरेशंस





operators