سؤال

لقد استخدمت دائما || (أنبوبين) في تعبيرات OR، سواء في C# أو PHP.أحيانًا أرى أنبوبًا واحدًا مستخدمًا: |.ما الفرق بين هذين الاستخدامين؟هل هناك أي محاذير عند استخدام أحدهما على الآخر أم أنها قابلة للتبديل؟

هل كانت مفيدة؟

المحلول

مثل & و && المشغل، المشغل المزدوج هو مشغل "ماس كهربائى".

على سبيل المثال:

if(condition1 || condition2 || condition3)

إذا كان الشرط 1 صحيحًا، فلن يتم التحقق من الشرطين 2 و3.

if(condition1 | condition2 | condition3)

سيؤدي هذا إلى التحقق من الشرطين 2 و3، حتى لو كان الرقم 1 صحيحًا بالفعل.نظرًا لأن الظروف الخاصة بك يمكن أن تكون وظائف باهظة الثمن، فيمكنك الحصول على تعزيز جيد للأداء باستخدامها.

هناك تحذير كبير، NullReferences أو مشاكل مماثلة.على سبيل المثال:

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

إذا كانت الفئة فارغة، فسوف تتوقف عبارة if بعد ذلك class != null هو زائف.إذا كنت تستخدم & فقط، فسوف يحاول التحقق class.someVar وتحصل على لطيفة NullReferenceException.مع Or-Operator، قد لا يكون هذا بمثابة فخ لأنه من غير المحتمل أن تؤدي إلى شيء سيئ، ولكن هذا شيء يجب أخذه في الاعتبار.

لا أحد يستخدم الأغنية المنفردة على الإطلاق & أو | على الرغم من ذلك، ما لم يكن لديك تصميم حيث يكون كل شرط بمثابة وظيفة يجب تنفيذها.تبدو هذه الرائحة وكأنها رائحة تصميمية، لكنها في بعض الأحيان (نادرًا) طريقة نظيفة للقيام بالأشياء.ال & يقوم عامل التشغيل "بتشغيل هذه الوظائف الثلاث، وإذا أعادت إحداها خطأ، فقم بتنفيذ كتلة else"، بينما يقوم عامل التشغيل | "يقوم بتشغيل الكتلة else فقط في حالة عدم إرجاع أي خطأ" - يمكن أن يكون مفيدًا، ولكن كما قيل، غالبًا ما تكون رائحة تصميم.

هناك استخدام ثاني لل | و & المشغل بالرغم من ذلك: العمليات الثنائية.

نصائح أخرى

|| هو المنطق أو المشغل.يبدو أنك تعرف أساسًا ما هو هذا.يتم استخدامه في الجمل الشرطية مثل if و while وما إلى ذلك.

condition1 || condition2

يتم تقييمه على أنه صحيح إذا كان الشرط 1 أو الشرط 2 صحيحًا.

| هو bitwise أو المشغل.يتم استخدامه للعمل على رقمين.تنظر إلى كل بت من كل رقم على حدة، وإذا كان أحد البتات هو 1 في واحد على الأقل من الأرقام، فإن البت الناتج سيكون 1 أيضًا.وفيما يلي بعض الأمثلة على ذلك:

A = 01010101
B = 10101010
A | B = 11111111

A = 00000001
B = 00010000
A | B = 00010001

A = 10001011
B = 00101100

A | B = 10101111

نأمل أن يكون هذا منطقيا.

للإجابة على السؤالين الأخيرين ، لن أقول أن هناك أي تحذيرات إلى جانب "معرفة الفرق بين المشغلين". إنهم ليسوا قابلين للتبديل لأنهم يقومون بأمرين مختلفين تمامًا.

واحد هو "bitwise أو".

10011b | 01000B => 11011B

والآخر هو المنطق أو.

صحيح أو خطأ => صحيح

سؤال جيد.يعمل هذان العاملان بنفس الطريقة في PHP وC#.

| هو قليلا أو.سيتم مقارنة قيمتين من خلال البتات الخاصة بهما.على سبيل المثال1101 | 0010 = 1111.وهذا مفيد للغاية عند استخدام خيارات البت.على سبيل المثالالقراءة = 01 (0X01) الكتابة = 10 (0X02) القراءة والكتابة = 11 (0X03).أحد الأمثلة المفيدة هو فتح الملفات.مثال بسيط سيكون:

File.Open(FileAccess.Read | FileAccess.Write);  //Gives read/write access to the file

|| منطقي أو.هذه هي الطريقة التي يفكر بها معظم الناس في OR ويقارنون قيمتين بناءً على حقيقتهما.على سبيل المثالسأذهب إلى المتجر أو سأذهب إلى المركز التجاري.هذا هو الأكثر استخدامًا في التعليمات البرمجية.على سبيل المثال

if(Name == "Admin" || Name == "Developer) { //allow access } //checks if name equals Admin OR Name equals Developer

موارد PHP: http://us3.php.net/language.operators.bitwise

موارد C#: http://msdn.microsoft.com/en-us/library/kxszd0kx(VS.71).aspx

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

مثال بسيط في جافا

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

& - (الشرط 1 والشرط 2):يتحقق من كلتا الحالتين حتى لو كانت الأولى خاطئة

&& - (الشرط 1 && الشرط 2):لا تهتم بالتحقق من الحالة الثانية إذا كانت الحالة واحدة خاطئة

&& - سيجعل عامل التشغيل التعليمات البرمجية الخاصة بك تعمل بشكل أسرع واحترافي ونادرًا ما يتم استخدامها

| - (الشرط 1 | الشرط 2):يتحقق من كلتا الحالتين حتى لو كانت الحالة 1 صحيحة

|| - (الشرط 1 || الشرط 2):لا تهتم بالتحقق من الحالة الثانية إذا كانت الأولى صحيحة

|| - سيجعل المشغل رمزك بشكل أسرع ، مهنيًا | نادرا ما يستخدم

الأنبوب المفرد، |، هو أحد bitwise العاملين.

من ويكيبيديا:

في عائلة لغة البرمجة C ، يكون المشغل bitwise أو المشغل هو "|" (يضخ).مرة أخرى ، يجب عدم الخلط بين هذا المشغل مع "نظيره المنطقي أو" المنطقي ، الذي يعامل معاملاته كقيم منطقية ، ويتم كتابته "||" (أنبوبان).

حسب تعريفهما الرياضي، فإن OR و AND هما عاملان ثنائيان؛إنهم يتحققون من ظروف LHS و RHS بغض النظر ، على غرار | و &.

|| و && تغيير خصائص OR و والمشغلين عن طريق إيقافهم عندما لا يتم الوفاء بحالة LHS.

و | يقوم المشغل بإجراء بعض المعاملات (بمعنى أن كلا الجانبين يجب أن يقيموا كاذبًا حتى يعود كاذب) بينما || سيقوم المشغل بتقييم المشغل الثاني فقط إذا احتاج إلى ذلك.

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

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

أنبوب سينغ "|" هو "bitwise" أو ويجب استخدامه فقط عندما تعرف ما تفعله.الأنبوب المزدوج "||" هو منطقي أو ، ويمكن استخدامه في العبارات المنطقية ، مثل "x == 0 || x == 1".

فيما يلي مثال على ما يفعله bitwise أو:إذا كان a=0101 وb=0011، فإن a|b=0111.إذا كنت تتعامل مع نظام منطقي يعامل أي شيء غير الصفر على أنه صحيح، فإن معامل البت أو سيتصرف بنفس الطريقة التي يعمل بها المنطق أو، لكنه لن يكون نظيره (معامل البت و"&").أيضا bitwise أو لا يؤدي تقييم ماس كهربائى.

أنبوب واحد (|) هو عامل التشغيل أو عامل البت.

الأنبوبان (||) هما عامل التشغيل المنطقي OR.

أنها ليست قابلة للتبديل.

|| (أنبوبان) عادة ما يكون أ منطقي أو بينما | (أنبوب واحد) هو أ الثنائية أو.من أعلى رأسي، لا أستطيع أن أفكر في أي وقت سيكون فيه الفرق بمثابة مشكلة كبيرة (بخلاف عندما تقوم بتخصيص النتيجة لشيء آخر).ومع ذلك فأنا متأكد من أن شخصًا آخر سيكون لديه موقف حيث يكون الأمر مهمًا.

يحرر:واو، ستة إجابات أخرى في الوقت الذي استغرقته في كتابة هذا.

Bitwise (|) مقابل.منطقي(||)!فكر في الكائنات المنطقية باعتبارها كائنات قابلة للمقارنة في Java، وقم بمقارنة بعض "الأجزاء" المميزة بينما ينظر عامل البت إلى هذه الكائنات وبدلاً من معرفة ما إذا كانت توأمان بصريًا (مثلما يفعل المنطق)، يقوم بأخذ عينة من الحمض النووي وينظر إلى الصفر والواحد بدلاً من.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top