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

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

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

AND و بیتی (&)، OR یا بیتی (|) و XOR یای منحصر بیتی (^)

عملگرهای بیتی محاسبات خود را در سطح بیت متغیرها انجام می‌دهند. این نوع عملگرها به حل طیف گسترده‌ای از مشکلات متداول برنامه‌نویسی کمک می‌کنند.

بخش زیادی از مطالبی که در این پست راجع به محاسبات بیتی آمده، از آموزشی است که در اینجا قابل‌دسترس است.

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

“و” بیتی:

عملگر و بیتی در ++C تک امپرسند (&) است و بین دو عبارت از جنس integer قرار می‌گیرد. این عملگر مستقلاً روی تک‌تک بیت‌های عملوندهایش طبق این قانون عمل می‌کند: اگر هر دو بیت ورودی یک بودند، خروجی یک می‌شود؛ وگرنه خروجی صفر است. یک راه دیگر بیان کردن این موضوع، مثال زیر است:

در آردوینو نوع int، شانزده بیتی است؛ پس استفاده از عملگر & بین دو عبارت، باعث انجام 16 عمل AND همزمان خواهد شد. مثال در یک تکه کد:

هر 16 بیت a و b با استفاده از عملگر AND پردازش و همه‌ی 16 بیت حاصل در c ذخیره می‌شوند. حاصل، مقدار 01000100 باینری است که معادل عدد 68 دهدهی است.

یکی از معمول‌ترین استفاده‌های “و” بیتی، انتخاب بیت یا بیت‌هایی خاص از یک مقدار integer است که عمل ماسک کردن (masking) نامیده می‌شود. برای مثال:

 

“یا” بیتی:

عملگر یا بیتی در ++C، نماد لوله عمودی | (پایپ) است. همانند عملگر &، این عملگر نیز مستقلاً روی تک‌تک بیت‌های عملوندهایش عمل می‌کند؛ اما واضح است که کاری که انجام می‌دهد، از عمل & متفاوت است. حاصل عملگر OR دو بیت، در صورتی یک است که یکی یا هر دو بیت 1 باشند. وگرنه حاصل صفر می‌شود. به بیانی دیگر:

مثالی از یا بیتی در تکه کدی از ++C:

 برنامه‌ای مثالی برای آردوینو uno:

کاری معمول برای عملگرهای AND و OR کاری است که برنامه‌نویسان به آن خواندن- اصلاح- نوشتن (‌Read-Modify-Write) یک پورت می‌گویند. در میکروکنترلرها، پورت یک عدد 8 بیتی است که چیزی مربوط به شرایط پین‌ها را بیان می‌کند. نوشتن روی پورت، همه‌ی پین‌ها را به‌یک‌باره کنترل می‌کند.

PORTD یک ثابت توکار است که به وضعیت خروجی پین‌های دیجیتال 0,1,2,3,4,5,6,7 اشاره دارد. اگر در یک موقعیت بیت، 1 وجود داشته باشد، آن بیت HIGH است. (پین‌ها باید با دستور ()pinMode  به صورت خروجی تعریف شوند.) پس اگر بنویسیم ;PORTD = B00110001 پین‌های 0،4 و 5 را HIGH کرده‌ایم. در این عمل نکته‌ای وجود دارد: ممکن است که ما وضعیت پین‌های 0 و 1 را نیز تغییر داده‌ باشیم؛ این دو پین‌ برای ارتباطات سریال آردوینو استفاده می‌شوند؛ پس ما ممکن است که در ارتباط سریال مداخله کرده باشیم.

الگوریتم ما برای برنامه این است:

  • PORTD را بیاورید و تنها بیت‌هایی که متناظر با پین‌های دلخواهتان (پین‌هایی که می‌خواهید کنترل کنید.) هستند را پاک کنید. (با “و” بیتی)
  • برای پین‌های تحت کنترل، مقدار PORTD اصلاح‌شده را با مقدار جدید ترکیب کنید. (با “یا” بیتی)

 

“یای منحصر” بیتی (XOR):

یک عملگر کمی غیرمعمول در ++C است که به آن یای منحصر یا XOR (اکس اُر) بیتی گویند. عملگر یای منحصر بیتی با علامت ^ نوشته می‌شود. این عملگر بسیار شبیه به عملگر “یا” بیتی | است فقط هنگامی‌که هر دو عملوند یک باشند هم نتیجه‌ی 0 می‌دهد. در واقع نتیجه‌ی این عملگر هنگامی‌که دو عملوند مشابه داشته باشد، 0 و هنگامی‌که عملوندها متفاوت باشند 1 می‌شود.

یک مثال کد ساده:

 

‌معمولا از عملگر ^ برای تغییر وضعیت برخی از بیت‌های یک عبارت صحیح (مثلا تغییر از 0 به 1 یا 1 به 0) استفاده می‌شود. در یک عملیات XOR اگر در بیت ماسک عدد 1 باشد، آن بیت معکوس شده؛ اگر 0 باشد، بیت معکوس نشده و همان مقدار باقی می‌ماند. در زیر برنامه‌ای را برای چشمک زدن پین دیجیتال 5 می‌بینید:

 

 

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

منبع

حمایت از Yalda

خوشحال میشیم برای تداوم و کیفیت ما رو حمایت کنید.

0 نفر

پــــســنــدیـده انـد

توجه

Yalda
Yalda

علاقه‌مند به یادگیری چیزهای جدید!

دیدگاه ها

2 دیدگاه

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه اول سیسوگ (مسابقه اول: درک سخت افزار) انتقادهای زیادی رو در پی داشت تا جایی که حتی خودمم به نتیجه مسابقه...

Zeus ‌ Zeus ‌
  • 2 سال پیش

راه اندازی LCD گرافیکی Nokia 1661 و دانلود کتابخانه آن

LCD گرافیکی یکی از مهم ترین پارامترهای موجود در طراحی انواع مدارات الکترونیکی پیچیده و حتی ساده است ، نمایش وضعیت و...

Zeus ‌ Zeus ‌
  • 4 سال پیش

ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کنترل امروزه کاربرد زیادی پیدا کرده است؛ از ریموت‌های درب بازکن تا ریموت‌های دزدگیر و کنترل روشنایی همه از یک اصول اولیه پیروی می‌کنند و آن‌هم ارسال اطلاعات به‌صورت بی‌سیم است....

Zeus ‌ Zeus ‌
  • 5 سال پیش

همه چیز درباره ریموت کنترل‌های هاپینگ

امنیت همیشه و در همه‌ی اعصار، مقوله‌ی مهم و قابل‌توجه‌ ای بوده و همیشه نوع بشر به دنبال امنیت بیشتر، دست به ابداعات و اختراعات گوناگونی زده است. ریموت کنترل یکی از این اختراعات است. در این مقاله، به بررسی امنیت انواع ریموت‌های کنترل خواهیم پرداخت....

Zeus ‌ Zeus ‌
  • 5 سال پیش

مسابقه سوم: استخراج داده از رشته ها در زبان C

نزدیک به 5 ماه از مسابقه دوم سیسوگ می‌گذره و فکر کردم که بد نیست یک چالش جدید داشته باشیم! البته چالش‌ها...

Zeus ‌ Zeus ‌
  • 2 سال پیش

مسابقه ششم: بزن میکروکنترلر را بسوزون!

بزنم میکروکنترلر را بسوزونم اونم تو  این شرایط!، طراحی مسابقه از اون چیزی که به نظر می‌رسه سخت‌تر است، باید حواست باشه...

Zeus ‌ Zeus ‌
  • 11 ماه پیش

آموزش قدم به قدم راه اندازی +NRF24L01

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها قبل از اینکه قسمت بشه با ماژول...

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش

ساخت ماینر با FPGA و ARM

چند ماهی هست که تب بیت کوین و ارزهای دیجیتال خیلی بالا رفته! چه شد که این پست را نوشتم همانطور که...

Zeus ‌ Zeus ‌
  • 3 سال پیش

کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

در قسمت اول به یکسری اطلاعات کلی ماژول mc60 پرداختیم، با نرم افزار QNavigator کار کردیم و یک هدربرد هم برای کار...

Mahdi.h   Mahdi.h  
  • 3 سال پیش

مسابقه چهارم: کدام حلقه سریع‌تر است؟

حدود ۷ ماه پیش، مسابقه سوم سیسوگ رو برگزار کردیم و کلی نکته در مورد خواندن رشته‌های ورودی را بررسی کردیم. فکر...

Zeus ‌ Zeus ‌
  • 1 سال پیش
سیـــســـوگ

مرجع متن باز آموزش الکترونیک