Arduino/compound operators/compoundbitwiseand

من موسوعة حسوب
مراجعة 08:06، 11 أكتوبر 2018 بواسطة جميل-بيلوني (نقاش | مساهمات) (أنشأ الصفحة ب'يُستعمَل المعامل <code>=&</code> المركَّب عادةً مع متغير وثابت لتصفير قيمة بت محدَّد (أي جعله في الح...')
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

يُستعمَل المعامل =& المركَّب عادةً مع متغير وثابت لتصفير قيمة بت محدَّد (أي جعله في الحالة LOW). يشار غالبًا إلى هذه العملية في المراجع على أنها عملية «تصفير» (clearing) أو «إعادة ضبط» (resetting) البتات.

اطلع على الشكل التالي الذي يشرح تطبيق المعامل & مع الأعداد الثنائية:

0  0  1  1    operand1
0  1  0  1    operand2
----------
0  0  0  1    result = operand1 & operand2

البنية العامة

x &= y;   // x = x & y;

المعاملات

x

متغيرٌ من النوع: محرف، أو عدد صحيح، أو عدد طويل.

y

متغيرٌ أو ثابتٌ من النوع: محرف، أو عدد صحيح، أو عدد طويل.

أمثلة

تصفَّر قيمة البتات التي تطبق العملية AND -عبر المعامل &- عليها مع أصفارٍ، لذا يكون المثال التالي محقق دومًا لأي نوع من المتغيرات:

myByte & B00000000 = 0;

أمَّا قيمة البتات التي تطبق العملية AND -عبر المعامل &- عليها مع واحدات فتبقى نفسها دون تغيير:

myByte & B11111111 = myByte;

ملاحظات وتحذيرات

بما أنَّنا نتعامل مع بتات عند استعمال معاملات الأعداد الثنائية، فمن الملائم استعمال الصيغة الثنائية مع الثوابت التي نستخدمها. لا تتغير قيمة الأعداد عند تمثيلها بأنظمة عد مختلفة (مثل النظام الثنائي والعشري)، إلا أنها تصبح عصيَّة على الفهم بعض الشيء إن لم تمثَّل بالنظام العشري. يُكتَب أحيانًا الصفر بالشكل B00000000 للتوضيح فقط مع أنَّ الصفرَ هو صفرٌ في أي نظام عدِّ كان.

بناءً على ما سبق، لتصفير البت الأول والثاني فقط (ضبط قيمتها إلى 0) في متغير دون المساس بالبتات الأخرى، يمكن استعمال المعامل &= المركب مع الثابت B11111100 الذي يدعى حينئذٍ «قناع»:

1  0  1  0  1  0  1  0    المتغير
1  1  1  1  1  1  0  0     القناع
----------------------
1  0  1  0  1  0  0  0     الناتج
|              |  |  |
 --------------    --
    صُفِّرت      لم تتغير

يمكن إعادة تمثيل الشكل السابق مع تبديل الرمز x مكان بتات المتغير لمعرفة البتات التي تغيرت من تلك التي لم تتغير بعد تنفيذ العملية:

x  x  x  x  x  x  x  x    المتغير
1  1  1  1  1  1  0  0     القناع
----------------------
x  x  x  x  x  x  0  0     الناتج
|              |  |  |
 --------------    --
    صُفِّرت      لم تتغير

الآن، يجب أن يبدو المثال التالي واضحًا ومفهومًا وأن تعرف كيفية استعمال المعامل &= لتصفير البتات التي تريدها:

myByte =  B10101010;
myByte &= B11111100; // B10101000 :الناتج هو

انظر أيضًا

مصادر