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

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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

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

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

مصادر