
در آردوینو، نوع دادهی long برای ذخیرهی اعداد صحیح بسیار بزرگ (مثبت یا منفی) استفاده میشود.
این نوع داده در تمام بردهای رایج آردوینو (از جمله Uno، Nano، Mega، ESP32 و Due) دقیقاً ۴ بایت (۳۲ بیت) حافظه مصرف میکند.
محدودهی مقادیر قابل ذخیره در یک متغیر long:
−۲,۱۴۷,۴۸۳,۶۴۸ تا +۲,۱۴۷,۴۸۳,۶۴۷
این محدوده تقریباً ۶۵ هزار برابر بزرگتر از محدودهی int در آردوینو Uno است — پس برای کارهایی که نیاز به اعداد بزرگ دارند، گزینهی ایدهآلی است.
در بسیاری از پروژهها، اعدادی که استفاده میکنیم از محدودهی int (در AVR) فراتر میروند. مثالهای رایج:
millis() تعداد میلیثانیههای گذشته از روشن شدن آردوینو را برمیگرداند. این عدد پس از حدود ۹ ساعت از محدودهی int خارج میشود!long currentTime = millis(); // زمان فعلی سیستم
long latitude = 356892345; // مختصات جغرافیایی (به صورت fixed-point)
long counter = 0; // شمارندهی بزرگ
⚠️ نکته: برای تعریف یک عدد ثابت به عنوان long، بهتر است پسوند L یا l به آن اضافه کنید (ترجیحاً L بزرگ، چون l کوچک شبیه عدد ۱ است):
long bigNumber = 1000000L; // مشخص میکند که این عدد long است
تابع millis() خروجی unsigned long دارد. اگر آن را در یک int ذخیره کنید، پس از ۳۲ ثانیه سرریز میشود! اما با long (یا بهتر است unsigned long) مشکلی پیش نمیآید:
unsigned long startTime = millis();
void setup() {
Serial.begin(9600);
}
void loop() {
unsigned long currentTime = millis();
unsigned long elapsedTime = currentTime - startTime;
Serial.print("زمان سپریشده: ");
Serial.print(elapsedTime / 1000); // تبدیل به ثانیه
Serial.println(" ثانیه");
delay(1000);
}
اگر عدد شما هرگز منفی نمیشود (مثل زمان، شمارنده، ولتاژ)، از unsigned long استفاده کنید:
— long: −۲,۱۴۷,۴۸۳,۶۴۸ تا +۲,۱۴۷,۴۸۳,۶۴۷
— unsigned long: ۰ تا ۴,۲۹۴,۹۶۷,۲۹۵
یعنی با unsigned long، محدودهی مثبت شما دو برابر میشود!
اما اگر حتی یکبار نیاز به عدد منفی دارید، حتماً از long استفاده کنید.
در حالی که اندازهی int بسته به برد تغییر میکند، long در تمام پلتفرمهای آردوینو همیشه ۴ بایت است.
این ویژگی باعث میشود کدهای شما قابل انتقالتر (portable) باشند.
اگر به اطمینان نیاز دارید که متغیر شما ۴ بایت است، long گزینهی ایمنتری نسبت به int است.
| نوع داده | اندازه (بایت) | محدوده (در AVR) |
|---|---|---|
| byte | 1 | 0 تا 255 |
| int | 2 | −32,768 تا +32,767 |
| long | 4 | −2,147,483,648 تا +2,147,483,647 |
این مطلب بر اساس مستندات رسمی Arduino از بخش long – Language Reference تهیه شده است، با توضیحات سادهشده، مثالهای کاربردی و نکات طلایی منحصربهفرد برای جامعه فارسیزبان.
برچسب های مهم