اذهب إلى المحتوى
  • 1

الفرق بين && و & في c++

Ali Ali38

السؤال

Recommended Posts

  • 1

إن && تسمى short circuit و هي ليست ك &، الفرق بينهما هو كما يلي:

&& هي عملية منطقية و هي ال and و تكون بين عنصرين، كما أنها لا تحتاج إلى معالجة كل الحدود لإيجاد النتيجة النهائية، أي مثلاً في حال وجدت عبارة false ستتوقف ﻷنه من الواضح أن العبارة الكلية ستكون false ﻷنه لدينا شرط and، كما أنه في حال وضعنا أرقام عادية فإن أي رقم غير الصفر سيكون true بالنسبة لها و بالتالي:

int x = 10;
int y = 5;
x && y // true

& تعبر عن عملية ال and على مستوى ال bit أي أنها تقوم بعملية and بين بتات طرفيها (بالتالي طرفيها يجب أن يكونا أرقام)، و بالتالي سيتم معالجة كافة الحدود لإيجاد الناتج النهائي و لن تتوقف في حال وجدت false.

كما أننا في حال استعملناها في المثال السابق فسوف تعطي 0 و بالتالي ستعتبر false و ذلك ﻷن:

10 -> 1010 في النظام الثنائي
5  -> 0101 في النظام الثنائي
10 & 5 = 1010 & 0101 = 0

الآن ما الذي يمكن أن نستفيده من خاصية short circuit، هناك فائدتان أساسيتان هما:

  1. تسريع العملية، حيث أنه من الممكن أن تكون أطراف الشرط عبارة عن توابع من المكلف حسابها و بالتالي في حال كان بالإمكان التوقف مبكراً فهذا جيد.
  2. القيام بوضع شرط لاحق يعتمد على نتيجة شرط سابق بأن تكون true حتى يكون قابل للتفيذ بلا أخطاء، كمثال على ذلك لنفترض أن لديك دليل معين و تريد الوصول إلى العنصر الموافق لهذا الدليل في مصفوفة، يمكنك اختبار أن هذا الدليل ضمن حدود المصفوفة و من ثم اختبار العنصر في ذلك الدليل، لولا خاصية short circuit لم يكن بإمكاننا اختبار العنصر في الدليل المطلوب ﻷنه من الممكن أن الدليل خارج حدود المصفوفة و بالتالي سيعطي خطأ.
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

 

العامل and هو تمثيل بديل للمشغل && (ثنائي أو منطقي AND).

إذا كان كلا المعاملين لهما قيمة true ، فإن النتيجة لها القيمة true. خلاف ذلك ، فإن النتيجة لها قيمة خطأ. يتم تحويل كلا المعاملين بشكل ضمني إلى منطقي ونوع النتيجة منطقي.

على عكس عامل التشغيل & (bitwise AND) ، يضمن العامل && تقييم المعاملات من اليسار إلى اليمين. إذا تم تقييم المعامل الأيسر إلى 0 (أو خطأ) ، فلن يتم تقييم المعامل الأيمن.

دائرة قصيرة لكل من عامل التشغيل و and && (أي ، لا تقيم المعامل الثاني إذا كان المعامل الأول خطأ). وبالتالي ، يعد اختبار المؤشر الفارغ أمرًا صالحًا وآمنًا ، كما في المثال التالي:

bool test( int * p ) {
  return (p != 0) and (*p > 5);
}

كجزء من معيار C ++ 11 الجديد ، يدعم C ++ Builder الآن مراجع rvalue. يتم تكوين مرجع rvalue عن طريق وضع && (ولكن ليس and) بعد نوع في التصريح ، على النحو التالي:

Apt a;
Apt&& a_ref1 = a;

يتمثل الاختلاف الرئيسي بين مرجع lvalue المألوف ومرجع rvalue الجديد في أن مراجع rvalue يمكن أن ترتبط بمرجع مؤقت (أي ، rvalue) ، لكن مرجع lvalue (واحد على الأقل ليس ثابتًا) لا يمكن أن يرتبط بـ rvalue.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

&& يقوم بعملية مقارنة منطقية في حين & يقوم بعملية مقارنة للأعداد الثنائية binary للعبارتين

الفرق بين && و & هو :أن الـ compiler في حالة && يقوم باختبار العبارة الأولى إذا كانت خاطئة لايمر على العبارة الأخرى لأن الـ and يجب أن تكون كلتا العبارتين true فإذا كانت إحدى العبارتين false لاداعي لمرور الـ compiler للعبارة الأخرى.

ولكن في حالة & يمر الـ compilerعلى العبارة الثانية حتى وإن كانت العبارة الأولى false ، لذلك من الأفضل استخدام && بدل &.

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...