
در آردوینو، نوع دادهی unsigned int یک نوع عدد صحیح است که فقط میتواند اعداد مثبت یا صفر را ذخیره کند — هیچوقت نمیتواند عدد منفی باشد.
این نوع داده در بردهای مختلف آردوینو اندازهی متفاوتی دارد:
تفاوت اصلی آن با int این است که unsigned int فضای علامت (sign bit) را برای ذخیرهی مقدار عددی استفاده میکند — پس محدودهی مثبت آن دو برابر بزرگتر از int است.
توضیح برای مبتدیها: فرض کنید یک عدد ۲ بایتی دارید. در
int، یکی از بیتها فقط برای تشخیص «مثبت یا منفی» استفاده میشود، پس فقط ۱۵ بیت برای عدد باقی میماند. اما درunsigned int، همهی ۱۶ بیت برای عدد استفاده میشود — پس میتوانید اعداد بزرگتری ذخیره کنید، اما هیچوقت نمیتوانید عدد منفی داشته باشید.
از unsigned int زمانی استفاده میشود که: — مطمئن هستید عدد شما هرگز منفی نخواهد شد (مثل تعداد دور موتور، زمان سپریشده، مقدار سنسور)
— نیاز به محدودهی بزرگتری نسبت به int دارید (مثلاً در Uno، تا ۶۵ هزار به جای ۳۲ هزار)
— میخواهید منظور خود را بهوضوح در کد نشان دهید: «این عدد همیشه مثبت است».
unsigned int counter = 0;
unsigned int sensorValue = 1023; // حداکثر مقدار آنالوگ در آردوینو
unsigned int elapsedTime = 50000; // میلیثانیه — بیشتر از محدوده int در Uno
فرض کنید میخواهید تعداد بارهایی که یک سنسور فعال میشود را در یک روز بشمارید. این عدد ممکن است از ۳۲,۷۶۷ بیشتر شود — پس از unsigned int استفاده میکنیم:
unsigned int activationCount = 0;
void loop() {
if (digitalRead(sensorPin) == HIGH) {
activationCount++; // میتواند تا 65535 برسد (در Uno)
delay(100); // جلوگیری از نوسان
}
}
| نوع داده | اندازه (Uno) | محدوده (Uno) |
|---|---|---|
| int | 2 بایت | −32,768 تا +32,767 |
| unsigned int | 2 بایت | 0 تا 65,535 |
| long | 4 بایت | −2,147,483,648 تا +2,147,483,647 |
توضیح برای مبتدیها: اگر عدد شما همیشه مثبت است و در Uno از ۳۲ هزار بیشتر میشود، اما از ۶۵ هزار کمتر است،
unsigned intگزینهی ایدهآلی است. اگر از ۶۵ هزار هم بیشتر شد، باید ازlongیاunsigned longاستفاده کنید.
اگر یک متغیر unsigned int را کم کنید و به صفر برسد، دوباره به بزرگترین مقدار خود برمیگردد (سرریز معکوس):
unsigned int x = 0;
x = x - 1; // حالا x = 65535! (در Uno)
بنابراین، در حلقههایی مثل for (unsigned int i = 10; i >= 0; i--)، شرط i >= 0 همیشه true است — چون unsigned int هرگز منفی نمیشود! این یکی از رایجترین باگهای مبتدیهاست.
اگر کد شما را روی Uno مینویسید و بعد روی ESP32 اجرا میکنید، ممکن است متوجه نشوید که unsigned int در ESP32 ۴ بایت است. این میتواند باعث مشکلات ظریفی در حافظه یا محاسبات شود.
اگر به اندازهی دقیق نیاز دارید، بهتر است از انواع ثابتالاندازه مثل uint16_t یا uint32_t استفاده کنید.
unsigned int فقط اعداد ≥ ۰ را ذخیره میکندintاین مطلب بر اساس مستندات رسمی Arduino از بخش unsigned int – Language Reference تهیه شده است، با توضیحات سادهشده، مثالهای کاربردی و نکات طلایی منحصربهفرد برای جامعه فارسیزبان.
برچسب های مهم