عملگرهای شیفت بیتی در آردوینو

عملگرهای شیفت بیتی در آردوینو

عملگرهای شیفت بیتی در آردوینو:

شیفت چپ (>>) ، شیفت راست (<<)

دو عملگر شیفت بیتی در آردوینو وجود دارد: عملگر شیفت چپ >> و عملگر شیفت راست <<. این عملگرها باعث می‌شوند که بیت‌های عملوند سمت چپ، به تعدادی که در عملوند سمت راست مشخص شده است، به سمت چپ یا راست شیفت داده شوند. (جا‌به‌جا شوند.)

سینتکس (نحو): تعداد بیت >> متغیر : شیفت جپ تعداد بیت << متغیر : شیفت راست

پارامترها: متغیر: (از نوع‌های byte ، int، long) تعداد بیت: عدد صحیح <= 32

مثال:

 

int a = 5; // binary: 0000000000000101
int b = a << 3; // binary: 0000000000101000, or 40 in decimal
int c = b >> 3; // binary: 0000000000000101, or back to 5 like we started with
// ابتدا متغیری از نوع صحیح با مقدار پنج تعریف کرده‌ایم.
// سپس در خط دوم آن را سه بیت به سمت چپ شیفت داده‌ایم. حاصل این عمل در متغیر
// بی ریخته شده و در حال حاضر بی حاوی مقدار چهل دهدهی است.
// در انتها بی را سه بیت به سمت راست شیفت داده‌ایم. که عکس عمل بالا است. و
// در واقع سی حاوی مقدار پنج اولیه است.

هنگامی‌که شما مقدار X را به تعداد Y بیت (x << y) شیفت می‌دهید، Y بیت از چپ‌ترین بیت‌های X گم می‌شوند؛ در‌واقع از موجودیت خارج می‌شوند.

 

int a = 5; // binary: 0000000000000101
int b = a << 14;
// binary: 0100000000000000 - the first 1 in 101 was discarded
// اولین عدد یک از بین رفته است.

عملیات شیفت به چپ درواقع مقدار را در 2 به توان تعداد بیت ضرب می‌کند:  X*Y^2 .

عملگر شیفت چپ در آردوینو

برای مثال، شیفت چپ عدد 10 به تعداد 2 بیت، 40 می‌شود. یعنی 10*2^2=40

 

مثال:برای ایجاد توان‌هایی از 2، این عبارات مفید هستند:

 

1 << 0 == 1
1 << 1 == 2
1 << 2 == 4
1 << 3 == 8
...
1 << 8 == 256
1 << 9 == 512
1 << 10 == 1024
...

هنگامی‌که شما مقدار X را به تعداد Y بیت (x >> y) شیفت راست می‌دهید و بالاترین بیت X عدد 1 است، رفتار عملیات به نوع داده‌ی دقیق X بستگی دارد. اگر X از نوع int باشد، بالاترین بیت، بیت علامت است که همان‌طور که در بالا گفتیم، مشخص می‌کند که آیا X منفی است یا نه. در چنین موقعیتی، به دلایلی مبهم، بیت علامت به بیت‌های پایین‌تر کپی می‌شود:

int x = -16; // binary: 1111111111110000
int y = x >> 3; // binary: 1111111111111110

این رفتار که به آن توسعه علامت گویند، معمولا رفتار دلخواه ما نیست؛ ما احتمالا می‌خواهیم که از سمت چپ، صفر وارد شود. به نظر می‌رسد که قوانین شیفت به راست در عبارات صحیح بدون علامت، متفاوت است؛ پس می‌توانید از typecast (عمل تغییر نوع داده) برای متوقت کردن کپی از سمت چپ استفاده کنید:

 

int x = -16; // binary: 1111111111110000
int y = (unsigned int)x >> 3; // binary: 0001111111111110

اگر مراقب عمل توسعه علامت باشید می‌توانید از عملگر شیفت به راست، به عنوان راهی برای تقسیم مقدار به توان‌های 2، استفاده کنید. برای مثال:

 

int x = 1000;
int y = x >> 3; // integer division of 1000 by 8, causing y = 125.
//عدد هزار به دو به توان سه (=هشت) تقسیم می‌شود. حاصل متغیر وای، صد و
// بیست و پنج است.

 

پس عملیات شیفت به راست، در واقع مقدار را به 2 به توان تعداد بیت، تقسیم می‌کند:

شیفت به راست در آردوینو

برای مثال شیفت راست عدد 40 به تعداد 2 بیت، 40 می‌شود. یعنی 40/ (2^2)=10

اطلاعات بیشتر از محاسبات bitwise

منبع

درباره نویسنده

نویسنده و طراح الکترونیکا هستم . سوالی داشتید در کامنت ها یا پیج های اینستاگرام و تلگرام سایت بپرسید .