المعامل >> في أردوينو

من موسوعة حسوب
< Arduino‏ | bitwise operators
مراجعة 07:10، 11 أكتوبر 2018 بواسطة جميل-بيلوني (نقاش | مساهمات)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

يزيح المعامل >> البتات الواقعة على يساره إلى اليسار عددًا محدَّدًا من الخانات مساويًا للقيمة الموجودة على يمينه.

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

variable << number_of_bits;

المعاملات

variable

القيمة العددية الثنائية المراد إزاحة البتات فيها عددًا محدَّدًا من الخانات. أنواع البيانات المسموح بها هي: بايت، وعدد صحيح، وعدد طويل.

number_of_bits

عددٌ صحيحٌ يمثِّل مقدار الإزاحة التي ستُطبَّق على العدد variable. يجب أن تكون قيمة هذا المعامل <= 32.

أمثلة

مثالٌ على استعمال المعامل >>:

int a = 5;        // 0000000000000101 :القيمة الثنائية هي
int b = a << 3;   // القيمة الثنائية هي: 0000000000101000، والقيمة في النظام العشري هي: 40

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

عند إزاحة عددٍ ما وليكن x فرضًا بمقدار محدَّد وليكن y (أي x << y)، ستُفقَد البتات التي عددها y (أي بمقدار الإزاحة) الواقعة في أقصى يسار العدد x؛ بعبارةٍ أخرى، ستُزَاح هذه البتات خارج العدد، وسيدخل مكانها في الطرف المقابل (أقصى اليمين) أصفارٌ.

int x = 5;        // 0000000000000101 :القيمة الثنائية هي
int y = 14;
int result = x << y;  // القيمة الثنائية الناتجة: 0100000000000000، لاحظ أن هنالك 1 قد فُقِد

إن كنت متأكدًا من عدم خروج أي واحداتٍ موجودةٍ في العدد المزاح خارجه، فإنَّ أبسط طريقة للتفكير بآلية عمل المعامل >> هي أنَّه يضرب العدد الواقع على يساره بالعدد 2 مرفوعًا لقوة العدد الواقع على يمينه (أي القيمة الناتجة بعد الإزاحة هي variable * 2number_of_bits). على سبيل المثال، لتوليد الأعداد 2n، إذ n هي 1، 2، 3، ...إلخ.، يمكن تطبيق المثال التالي:

   Operation  Result
   ---------  ------
    1 <<  0      1
    1 <<  1      2
    1 <<  2      4
    1 <<  3      8
    ...
    1 <<  8    256
    1 <<  9    512
    1 << 10   1024
    ...

يمكن استعمال المثال التالي لطباعة قيمة بايت على واجهة التخاطب التسلسلية عبر استخدام المعامل >> لإزاحة البايت من الأسفل (الموضع الأقل أهمية [LSB]) إلى الأعلى (الموضع الأكثر أهمية [MSB]) ثم طباعة القيمة الثنائية الناتجة.

// طباعة القيمة الثنائية (0 أو 1) لبايت
void printOut1(int c) {
  for (int bits = 7; bits > -1; bits--) {
    // Compare bits 7-0 in byte
    if (c & (1 << bits)) {
      Serial.print ("1");
    }
    else {
      Serial.print ("0");
    }
  }
}

انظر أيضًا

  • المعامل &: يُجرِي في لغة ++C العملية AND على كل بتين متقابلين من بتات العددين المعطيين بشكل مستقل ويعطي القيمة العددية الناتجة.
  • المعامل <<: يُجرِي البتات الواقعة على يساره إلى اليمين عددًا محدَّدًا من الخانات مساويًا للقيمة الموجودة على يمينه.
  • المعامل ^: يُجرِي في لغة ++C العملية XOR على كل بتين متقابلين من بتات العددين المعطيين بشكل مستقل ويعطي القيمة العددية الناتجة.
  • المعامل |: يُجرِي في لغة ++C العملية OR على كل بتين متقابلين من بتات العددين المعطيين بشكل مستقل ويعطي القيمة العددية الناتجة.
  • المعامل ~: يُجرِي في لغة ++C العملية NOT على كل بت من البتات المعطاة بشكل مستقل -بخلاف المعامل & والمعامل |- ويعطي القيمة العددية الناتجة.
  • درسٌ عمليٌّ على العمليات الحسابية التي تجرَى على البت.

مصادر