توصیه شده, آردوینو

مقایسه کاراکترها و مقادیر عددی و استرینگ‌ها | قسمت سیزدهم آموزش آردوینو

مقایسه کاراکترها و مقادیر عددی، استرینگ‌ها | قسمت سیزدهم آموزش آردوینو

در قسمت یازدهم از آموزش آردوینو به بررسی ساختاردهی کد با استفاده از بلوک‌های تابع و برگرداندن بیش از یک مقدار از تابع، پرداختیم. در این قسمت قصد داریم درباره مقایسه کاراکترها و مقادیر عددی، مقایسه استرینگ‌ها و همچنین، انجام مقایسه‌های منطقی (Logical Comparisons) صحبت کنیم.

در ابتدای این مطلب رابطه بین مقادیر را بررسی می‌کنیم.

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

مثالکاربردعملگر
2 == 3 // evaluates to false مساوی بودن==
2 != 3 // evaluates to true مساوی نبودن!=
2 > 3 // evaluates to falseبزرگ تر بودن>
2 < 3 // evaluates to trueکوچک تر بودن<
2 >= 3 // evaluates to false
بزرگ تر یا مساوی بودن
>=
2 <= 3 // evaluates to trueکوچک تر یا مساوی بودن<=

جدول 1:‌ عملگرهای رابطه ای و برابری

اسکچ زیر نتایج استفاده از عملگرهای مقایسه‌ای را نشان می‌دهد:

خروجی به صورت زیر است:

نکته✅

توجه داشته باشید که نماد عملگر تساوی (equality operator) شامل دو علامت مساوی (یعنی ==) می‌باشد. یکی از خطاهای رایج در برنامه‌نویسی، اشتباه گرفتن این عملگر با عملگر تخصیص (assignment operator) است که نماد آن یک علامت تساوی است. (یعنی =)

 

عبارت زیر مقدار i را با 3 مقایسه می کند:

اما فرض کنید این کد را در اسکچ زیر قرار دهیم:

این عبارت همواره مقدار True برمی‌گرداند. زیرا مقدار i به 3 تنظیم می‌شود و در نتیجه هنگام مقایسه با 3، مقدار‌ها برابر خواهند بود.

همچنین، این عبارت نیز همواره مقدار True برمی‌گرداند. زیرا مقدار a در مجموعه‌ی کاراکترهای ASCII که Arduino از آن استفاده می‌کند، برابر با 97 است.

 با این حال، استرینگ‌ها را نمی‌توان مستقیماً با مقادیر عددی مقایسه کرد:

اما شما همیشه می‌توانید یک عدد یا کاراکتر را با یک کاراکتر تکی از یک رشته (استرینگ) مقایسه کنید:

برای کسب اطلاعات بیش‌تر درباره عملگرهای شرطی و مقایسه‌ای می‌توانید به لینک زیر مراجعه کنید:

https://www.arduino.cc/reference/en/language/structure/control-structure/if/

مقایسه استرینگ‌ها

در ادامه یاد خواهیم گرفت که آیا دو استرینگ کاراکتری یکسان هستند یا خیر.

یک تابع به نام strcmp (مخفف string compare) وجود دارد که به مقایسه استرینگ‌ها می‌پردازد. در اینجا یک فرگمنت استفاده از آن آورده شده است:

تابع strcmp، مقایسه‌ی دو رشته کاراکتری را انجام می‌دهد. این تابع دو رشته (آرایه‌ کاراکتری) را مقایسه کرده و سپس نتیجه‌ی مقایسه را به‌عنوان 0، 1 یا -1 برمی‌گرداند.

در این خصوص، تابع strcmp، در صورت مساوی بودن استرینگ‌ها، مقدار 0 را برمی‌گرداند و اگر اولین کاراکتر‌ nonmatching استرینگ اول مقدار بیش‌تری نسبت به استرینگ دوم داشته باشد، این تابع مقداری بزرگ‌تر از صفر را برمی‌گرداند. همچنین، اگر مقدار اولین کاراکتر nonmatching استرینگ اول کمتر از کاراکتر متناظر در استرینگ دوم باشد، تابع strcmp مقداری کمتر از صفر را برمی گرداند.

نکته مهم✅

به‌خاطر داشته باشید که استرینگ‌هایی با طول نابرابر به صورت یکسان در نظر گرفته نمی‌شوند؛ حتی در صورتی که استرینگ کوتاه‌تر در استرینگ بلندتر باشد.

بنابراین:

با استفاده از تابع strncmp، می‌توان استرینگ‌ها را تا تعداد معینی از کاراکترها مقایسه کرد. همچنین، شما می‌توانید از تابع strncmp برای مقایسه تعداد مشخصی از کاراکترها استفاده کنید.

برخلاف استرینگ‌های کاراکتری، استرینگ‌های آردوینو را می‌توان مستقیماً به صورت زیر مقایسه کرد:

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

انجام مقایسه‌های منطقی (Logical Comparisons)

در ادامه می‌خواهیم رابطه منطقی بین دو یا چند عبارت را بررسی کنیم.

در جدول 2 عملگرهای منطقی (Logical operators) بررسی شده‌اند.

توضیحاتتابعنماد
اگر عبارات شرطی هر دو طرف عملگر &&، درست (true) باشند، نتیجه true می شود.Logical And&&
اگر عبارت شرطی حداقل یک طرف از عملگر ||، درست (true) باشد، نتیجه true می شود.Logical Or||
اگر عبارت شرطی عملگر ! نادرست (false) باشد، نتیجه true و اگر عبارت شرطی این عملگر درست (true) باشد، نتیجه false می شود.
Not!

جدول 2: عملگرهای منطقی (Logical operators)

عملگرهای منطقی مقادیر true یا false را بر اساس رابطه منطقی برمی‌گردانند.

عملگر AND (&&) در صورتی که دو عملوند (Operand) آن، true باشند، مقدار true و در غیر این صورت، مقدار false را برمی‌گرداند:

عملگر OR (||) در صورتی که هر دو عملوند (Operand) آن true باشند، مقدار true و اگر هر دو عملوند (Operand)، false باشند، مقدار false را برمی‌گرداند:

عملگر Not فقط یک عملوند (Operand) دارد که مقدار آن معکوس است؛ یعنی اگر عملوند (Operand) آن true باشد، مقدار false و اگر عملوند (Operand) آن false باشد، مقدار true را برمی‌گرداند.

انجام عملیات بیتی

در ادامه درباره تنظیم یا پاک کردن بیت‌های خاصی در یک مقدار، صحبت خواهیم کرد.

در جدول 3 توضیحات مربوط به عملگرهای بیتی مختلف آورده شده است. در این جدول، پیشوند 0b نمایش باینری اعداد را نشان می دهد و به منظور جدا کردن اعداد اعشاری و باینری استفاده می شود.

مثالنتیجهتابعنماد
3 & 1 equals 1
(0b11 & 0b01 equals 0b01)
.اگر هر دو بیت 1 باشند، بیت ها را روی 1 قرار می دهد. در غیر این صورت، بیت ها روی 0 تنظیم می شوند
Bitwise And&
3 | 1 equals 3
(0b11 | 0b01 equals 0b11)
.اگر هر یک از بیت ها 1 باشند، بیت ها را روی 1 تنظیم می کندBitwise Or|
3 ^ 1 equals 2
(0b11 ^ 0b01 equals 0b10)
.تنها در صورتی که یکی از دو بیت 1 باشد، بیت ها را روی 1 تنظیم می کندBitwise Exclusive Or^
~1 equals 254
(~00000001 equals 11111110)
.مقدار هر بیت را معکوس می کند. نتیجه به تعداد بیت ها در دیتابیس بستگی دارد
Bitwise Negation~

جدول 3: عملگرهای بیتی

در زیر یک اسکچ آمده است که مقادیر نمونه جدول 2 را نشان می دهد.

عملگرهای بیتی برای تنظیم یا تست بیت‌ها استفاده می‌شوند. هنگامی که دو مقدار “And” یا “Or” دارید، عملگر روی هر بیت به صورت جداگانه کار می‌کند. با نگاه کردن به نمایش باینری مقادیر، متوجه نحوه کار‌ آن‌ها خواهید شد.

عدد صحیح اعشاری 3 باینری 11 است و عدد صحیح اعشاری 1 باینری 1 است. سمت راست ترین بیت ها هر دو 1 هستند؛ بنابراین نتیجه And-ing ،1 است. با حرکت به سمت چپ، بیت های بعدی 1 و 0 می باشند و بیت‌های باقی‌مانده And-ing ،0 هستند؛ بنابراین نتیجه بیتی آن ها 0 خواهد بود.

به عبارت دیگر، برای هر موقعیت بیت که در هر دو مکان یک عدد 1 وجود دارد، نتیجه عدد 1 و در غیر این صورت، 0 خواهد شد؛ بنابراین، 11 و 01 برابر است با 1.

اعداد باینری اغلب با صفرهای ابتدایی نوشته می‌شوند؛ البته این صفرهای ابتدایی اهمیتی ندارند و فقط، ارزیابی عملیات بیتی را آسان‌تر می‌کنند.

Bit 1 and Bit 2Bit 2Bit 1
000
010
001
111

جدول 4: Bitwise And

Bit 1 or Bit 2Bit 2Bit 1
000
110
101
111

جدول 5: Bitwise Or

Bit 1 ^ Bit 2Bit 2Bit 1
000
110
101
011

جدول 6: Bitwise Exclusive Or

تمام عبارات بیتی بر روی دو مقدار عمل می‌کنند، به جز عملگر negation. این عملگر به راحتی هر بیت را برمی‌گرداند، بنابراین 0 تبدیل به 1 و 1 تبدیل به 0 می‌شود.

برای مثال، مقدار بایت (8 بیتی) 00000001 به 11111110 تبدیل می شود. مقدار int دارای 16 بیت است؛ بنابراین وقتی هر کدام از آن ها برگردانده می شوند، نتیجه 15 تا 1 و یک عدد 0 می شود.

در ادامه در جدول 7، عملگرهای ترکیبی را بررسی کرده تا شما یاد بگیرید که چگونه از آن ها استفاده کنید.

عبارت معادلمثالعملگر
value = value + 5; // add 5 to valuevalue += 5;+=
value = value – 4; // subtract 4 from valuevalue -= 4;-=
value = value * 3; // multiply value by 3value *= 3;*=
value = value / 2; // divide value by 2value /= 2;/=
value = value >> 2; // shift value right two placesvalue >>= 2;>>=
value = value << 2; // shift value left two placesvalue <<= 2;<<=
mask = mask & 2; // binary-and mask with 2mask &= 2;&=
mask = mask | 2; // binary-or mask with 2mask |= 2;|=

جدول 7: عملگرهای ترکیبی (Compound operators)

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

نوشته های مشابه

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *