الفرق بين المراجعتين ل"Arduino/compound operators/compoundbitwisexor"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'يُستعمَل المعامل <code>=^</code> المركَّب عادةً مع متغير وثابت لقلب (عكس) قيمة بت محدَّد. اطلع على ا...')
 
(إضافة محتويات الصفحة.)
 
سطر 1: سطر 1:
يُستعمَل المعامل <code>=^</code> المركَّب عادةً مع متغير وثابت لقلب (عكس) قيمة بت محدَّد.
+
<noinclude>{{DISPLAYTITLE:المعامل <code>=^</code> في  أردوينو}}</noinclude>
 +
يُستعمَل المعامل <code>=^</code> المركَّب عادةً مع متغيِّرٍٍ وثابتٍ لقلب (عكس) قيمة بت محدَّد.
  
 
اطلع على الشكل التالي الذي يشرح تطبيق المعامل <code>[[Arduino/bitwise operators/bitwisexor|^]]</code> مع الأعداد الثنائية:<syntaxhighlight lang="arduino">
 
اطلع على الشكل التالي الذي يشرح تطبيق المعامل <code>[[Arduino/bitwise operators/bitwisexor|^]]</code> مع الأعداد الثنائية:<syntaxhighlight lang="arduino">
سطر 15: سطر 16:
 
==المعاملات==
 
==المعاملات==
 
===<code>x</code>===
 
===<code>x</code>===
متغيرٌ من النوع: [[Arduino/char|محرف]]، أو [[Arduino/int|عدد صحيح]]، أو [[Arduino/long|عدد طويل]].
+
متغيِّرٌ من النوع: [[Arduino/char|محرف]]، أو [[Arduino/int|عدد صحيح]]، أو [[Arduino/long|عدد طويل]].
 
===<code>y</code>===
 
===<code>y</code>===
متغيرٌ أو ثابتٌ من النوع: [[Arduino/char|محرف]]، أو [[Arduino/int|عدد صحيح]]، أو [[Arduino/long|عدد طويل]].
+
متغيِّرٌ أو ثابتٌ من النوع: [[Arduino/char|محرف]]، أو [[Arduino/int|عدد صحيح]]، أو [[Arduino/long|عدد طويل]].
 
==أمثلة==
 
==أمثلة==
 
تبقى قيمة البتات التي تطبق العملية XOR -عبر المعامل [[Arduino/bitwise operators/bitwisexor|<code>^</code>]]- عليها مع أصفارٍ دون تغيير، لذا يكون المثال التالي محققًا دومًا لأي نوع من المتغيرات:<syntaxhighlight lang="arduino">
 
تبقى قيمة البتات التي تطبق العملية XOR -عبر المعامل [[Arduino/bitwise operators/bitwisexor|<code>^</code>]]- عليها مع أصفارٍ دون تغيير، لذا يكون المثال التالي محققًا دومًا لأي نوع من المتغيرات:<syntaxhighlight lang="arduino">
سطر 25: سطر 26:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
==ملاحظات وتحذيرات==
 
==ملاحظات وتحذيرات==
بما أنَّنا نتعامل مع بتات عند استعمال [[Arduino/bitwise operators|معاملات الأعداد الثنائية]]، فمن الملائم استعمال الصيغة الثنائية مع الثوابت التي نستخدمها. لا تتغير قيمة الأعداد عند تمثيلها بأنظمة عد مختلفة (مثل النظام الثنائي والعشري)، إلا أنها تصبح عصيَّة على الفهم بعض الشيء إن لم تُمثَّل بالنظام العشري المألوف لدى البشر. يُكتَب أحيانًا الصفر بالشكل B00000000 للتوضيح فقط مع أنَّ الصفرَ هو صفرٌ في أي نظام عدِّ كان.
+
بما أنَّنا نتعامل مع بتات عند استعمال [[Arduino/bitwise operators|معاملات الأعداد الثنائية]]، فمن الملائم استعمال الصيغة الثنائية مع الثوابت التي نستخدمها. لا تتغير قيمة الأعداد عند تمثيلها بأنظمة عد مختلفة (مثل النظام الثنائي والعشري)، إلا أنَّها تصبح عصيَّة على الفهم بعض الشيء إن لم تُمثَّل بالنظام العشري المألوف لدى البشر. يُكتَب أحيانًا الصفر بالشكل <code>B00000000</code> للتوضيح فقط مع أنَّ الصفرَ هو صفرٌ في أي نظام عدِّ كان.
  
 
بناءً على ما سبق، لقلب قيمة البت الأول والثاني فقط (عكس قيمتهما من 0 إلى 1 أو من 1 إلى 0) في متغير دون المساس بالبتات الأخرى، يمكن استعمال المعامل <code>=^</code> المركب مع الثابت <code>B00000011</code> الذي يدعى  «قناعًا»:<syntaxhighlight lang="arduino">
 
بناءً على ما سبق، لقلب قيمة البت الأول والثاني فقط (عكس قيمتهما من 0 إلى 1 أو من 1 إلى 0) في متغير دون المساس بالبتات الأخرى، يمكن استعمال المعامل <code>=^</code> المركب مع الثابت <code>B00000011</code> الذي يدعى  «قناعًا»:<syntaxhighlight lang="arduino">
سطر 35: سطر 36:
 
  --------------    --
 
  --------------    --
 
     عُكسَت      لم تتغير  
 
     عُكسَت      لم تتغير  
</syntaxhighlight>يمكن إعادة تمثيل الشكل السابق مع تبديل الرمز x مكان بتات المتغير لمعرفة البتات التي قُلبَت (ستُمثَّل بالرمز x~) من تلك التي لم تتغير بعد تنفيذ العملية:<syntaxhighlight lang="arduino">
+
</syntaxhighlight>يمكن إعادة تمثيل الشكل السابق مع تبديل الرمز <code>x</code> مكان بتات المتغير لمعرفة البتات التي قُلبَت (ستُمثَّل بالرمز <code>[[Arduino/bitwise operators/bitwisenot|x~]]</code>) من تلك التي لم تتغير بعد تنفيذ العملية:<syntaxhighlight lang="arduino">
 
x  x  x  x  x  x  x  x    المتغير
 
x  x  x  x  x  x  x  x    المتغير
 
0  0  0  0  0  0  1  1    القناع
 
0  0  0  0  0  0  1  1    القناع
سطر 48: سطر 49:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
==انظر أيضًا==
 
==انظر أيضًا==
 +
* المعامل <code>[[Arduino/compound operators/compoundbitwiseand|=&]]</code>: يُستعمَل المركَّب عادةً مع متغير وثابت لتصفير قيمة بت محدَّد (أي جعله في الحالة LOW).
 +
* المعامل <code>[[Arduino/compound operators/compoundmultiplication|=*]]</code>: يعدُّ اختزالٌ لعملية ضرب القيمة الحالية لمتغيرٍ بثابتٍ أو متغيرٍ آخر ثم تخزين الناتج في المتغير نفسه.
 +
* المعامل <code>[[Arduino/compound operators/increment|++]]</code>: يزيد قيمة المتغير المستعمل معه بمقدار 1.
 +
* المعامل <code>[[Arduino/compound operators/compoundaddition|=+]]</code>: يعدُّ اختزالٌ لعملية جمع القيمة الحالية لمتغيرٍ مع ثابتٍ أو متغيرٍ آخر ثمَّ تخزين الناتج في المتغير نفسه.
 +
* المعامل <code>[[Arduino/compound operators/decrement|--]]</code>: ينقص قيمة المتغير المستعمل معه بمقدار 1.
 +
* المعامل <code>[[Arduino/compound operators/compoundsubtraction|=-]]</code>: يعدُّ اختزالٌ لعملية طرح ثابتٍ أو متغيرٍ آخر من القيمة الحالية لمتغيرٍ ثمَّ تخزين الناتج في المتغير نفسه.
 +
* المعامل <code>[[Arduino/compound operators/compounddivision|=/]]</code>: يعدُّ اختزالٌ لعملية قسمة القيمة الحالية لمتغيرٍ على ثابتٍ أو متغيرٍ آخر ثم تخزين الناتج في المتغير نفسه.
 +
* المعامل <code>[[Arduino/compound operators/compoundbitwiseor|=|]]</code>: يُستعمَل المركَّب عادةً مع متغير وثابت من لضبط قيمة بت محدَّد (ضبطه إلى القيمة 1 أو HIGH).
 +
* المعامل <code>[[Arduino/bitwise operators/bitwisexor|^]]</code>: يُجرِي في لغة ++C العملية XOR على كل بتين متقابلين من بتات العددين المعطيين بشكل مستقل ويعطي القيمة العددية الناتجة.
 +
* المعامل <code>[[Arduino/bitwise operators/bitwisenot|~]]</code>: يُجرِي في لغة ++C العملية NOT على كل بت من البتات المعطاة بشكل مستقل -بخلاف المعامل <code>[[Arduino/bitwise operators/bitwiseand|&]]</code> والمعامل <code>[[null|<nowiki>|</nowiki>]]</code>- ويعطي القيمة العددية الناتجة.
 +
 
==مصادر==
 
==مصادر==
 
*[https://www.arduino.cc/reference/en/language/structure/compound-operators/compoundbitwisexor/ صفحة المعامل =^ في توثيق أردوينو الرسمي.]
 
*[https://www.arduino.cc/reference/en/language/structure/compound-operators/compoundbitwisexor/ صفحة المعامل =^ في توثيق أردوينو الرسمي.]
 +
[[تصنيف: Arduino]]
 +
[[تصنيف: Arduino Operator]]
 +
[[تصنيف: Arduino Compound Operator]]

المراجعة الحالية بتاريخ 15:53، 11 أكتوبر 2018

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

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

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 على كل بت من البتات المعطاة بشكل مستقل -بخلاف المعامل & والمعامل |- ويعطي القيمة العددية الناتجة.

مصادر