المعامل =^ في أردوينو

من موسوعة حسوب

يُستعمَل المعامل =^ المركَّب عادةً مع متغيِّرٍٍ وثابتٍ لقلب (عكس) قيمة بت محدَّد.

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

0  0  1  1    operand1
0  1  0  1    operand2
----------
0  1  1  0    result = operand1 ^ operand2

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

x ^= y;   // x = x ^ y; يكافئ

المعاملات

x

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

y

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

أمثلة

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

myByte ^ B00000000 = myByte;

أمَّا قيمة البتات التي تطبق العملية XOR -عبر المعامل ^- عليها مع واحدات فستُقلَب (toggled) قيمتها (إذا كانت 0 تصبح 1 والعكس صحيح):

myByte ^ B11111111 = ~myByte;

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

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

بناءً على ما سبق، لقلب قيمة البت الأول والثاني فقط (عكس قيمتهما من 0 إلى 1 أو من 1 إلى 0) في متغير دون المساس بالبتات الأخرى، يمكن استعمال المعامل =^ المركب مع الثابت B00000011 الذي يدعى «قناعًا»:

1  0  1  0  1  0  1  0    المتغير
0  0  0  0  0  0  1  1     القناع
----------------------
1  0  1  0  1  0  0  1     الناتج
|              |  |  |
 --------------    --
    عُكسَت      لم تتغير

يمكن إعادة تمثيل الشكل السابق مع تبديل الرمز x مكان بتات المتغير لمعرفة البتات التي قُلبَت (ستُمثَّل بالرمز x~) من تلك التي لم تتغير بعد تنفيذ العملية:

x  x  x  x  x  x  x  x    المتغير
0  0  0  0  0  0  1  1     القناع
----------------------
x  x  x  x  x  x ~x ~x     الناتج
|              |  |  |
 --------------    --
    عُكسَت      لم تتغير

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

myByte =  B10101010;
myByte ^= B00000011 == B10101001;

انظر أيضًا

  • المعامل =&: يُستعمَل المركَّب عادةً مع متغير وثابت لتصفير قيمة بت محدَّد (أي جعله في الحالة LOW).
  • المعامل =*: يعدُّ اختزالٌ لعملية ضرب القيمة الحالية لمتغيرٍ بثابتٍ أو متغيرٍ آخر ثم تخزين الناتج في المتغير نفسه.
  • المعامل ++: يزيد قيمة المتغير المستعمل معه بمقدار 1.
  • المعامل =+: يعدُّ اختزالٌ لعملية جمع القيمة الحالية لمتغيرٍ مع ثابتٍ أو متغيرٍ آخر ثمَّ تخزين الناتج في المتغير نفسه.
  • المعامل --: ينقص قيمة المتغير المستعمل معه بمقدار 1.
  • المعامل =-: يعدُّ اختزالٌ لعملية طرح ثابتٍ أو متغيرٍ آخر من القيمة الحالية لمتغيرٍ ثمَّ تخزين الناتج في المتغير نفسه.
  • المعامل =/: يعدُّ اختزالٌ لعملية قسمة القيمة الحالية لمتغيرٍ على ثابتٍ أو متغيرٍ آخر ثم تخزين الناتج في المتغير نفسه.
  • المعامل =|: يُستعمَل المركَّب عادةً مع متغير وثابت من لضبط قيمة بت محدَّد (ضبطه إلى القيمة 1 أو HIGH).
  • المعامل ^: يُجرِي في لغة ++C العملية XOR على كل بتين متقابلين من بتات العددين المعطيين بشكل مستقل ويعطي القيمة العددية الناتجة.
  • المعامل ~: يُجرِي في لغة ++C العملية NOT على كل بت من البتات المعطاة بشكل مستقل -بخلاف المعامل & والمعامل |- ويعطي القيمة العددية الناتجة.

مصادر