Ali Ali38 نشر 11 سبتمبر 2022 أرسل تقرير نشر 11 سبتمبر 2022 لقد لاحظت أنه يمكن وضع & أو && للتعبير عن شرط and في c++ فلماذا يوجد طريقتين؟ هل هناك فرق بينهما؟ الأمر ذاته بالنسبة لل || و | أي شرط or. 2 اقتباس
1 Kais Hasan نشر 11 سبتمبر 2022 أرسل تقرير نشر 11 سبتمبر 2022 إن && تسمى 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، هناك فائدتان أساسيتان هما: تسريع العملية، حيث أنه من الممكن أن تكون أطراف الشرط عبارة عن توابع من المكلف حسابها و بالتالي في حال كان بالإمكان التوقف مبكراً فهذا جيد. القيام بوضع شرط لاحق يعتمد على نتيجة شرط سابق بأن تكون true حتى يكون قابل للتفيذ بلا أخطاء، كمثال على ذلك لنفترض أن لديك دليل معين و تريد الوصول إلى العنصر الموافق لهذا الدليل في مصفوفة، يمكنك اختبار أن هذا الدليل ضمن حدود المصفوفة و من ثم اختبار العنصر في ذلك الدليل، لولا خاصية short circuit لم يكن بإمكاننا اختبار العنصر في الدليل المطلوب ﻷنه من الممكن أن الدليل خارج حدود المصفوفة و بالتالي سيعطي خطأ. 1 اقتباس
0 Ahmed Sadek Elamine Touahria نشر 11 سبتمبر 2022 أرسل تقرير نشر 11 سبتمبر 2022 العامل 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 Ayoub Souad نشر 11 سبتمبر 2022 أرسل تقرير نشر 11 سبتمبر 2022 && يقوم بعملية مقارنة منطقية في حين & يقوم بعملية مقارنة للأعداد الثنائية binary للعبارتين الفرق بين && و & هو :أن الـ compiler في حالة && يقوم باختبار العبارة الأولى إذا كانت خاطئة لايمر على العبارة الأخرى لأن الـ and يجب أن تكون كلتا العبارتين true فإذا كانت إحدى العبارتين false لاداعي لمرور الـ compiler للعبارة الأخرى. ولكن في حالة & يمر الـ compilerعلى العبارة الثانية حتى وإن كانت العبارة الأولى false ، لذلك من الأفضل استخدام && بدل &. 1 اقتباس
السؤال
Ali Ali38
لقد لاحظت أنه يمكن وضع & أو && للتعبير عن شرط and في c++ فلماذا يوجد طريقتين؟ هل هناك فرق بينهما؟
الأمر ذاته بالنسبة لل || و | أي شرط or.
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.