متغیر یا Variable در برنامه نویسی اسمی است که به بخشی از فضای حافظه در برنامه میدهیم تا یک مقدار را در خود نگه دارد. در این بخش به معرفی انواع متغیر در ++C و نحوه اعلان یا تعریف آن در برنامهها خواهیم پرداخت. به طور کلی در این آموزش از مجله پی استور انواع عددی صحیح، انواع عددی ممیز شناور در ++C، نوع بولین، نوع شمارشی را تشریح و متغیرهایی از این نوع را در برنامهها استفاده خواهیم کرد.
مقدمه
ما در زندگی روزمره از دادههای مختلفی (اعداد، تصاویر، نوشتهها یا حروف الفبا، صداها، بوها و غیره) استفاده میکنیم. با پردازش این دادهها میتوانیم تصمیماتی اتخاذ کنیم، عکسالعملهایی نشان دهیم و مسئلهای را حل کنیم. کامپیوترها نیز قرار است همین کار را انجام دهند. یعنی دادههایی را بگیرند، آنها را به شکلی که ما تعیین میکنیم پردازش کنند و در نتیجه اطلاعات مورد نیازمان را استخراج کنند. برای اینکه بتوانیم از دادههای مختلف در برنامه نویسی استفاده کنیم باید آن ها را در قالب یک متغیر (جایی که داده ها در آن ذخیره می شوند) قرار دهیم. هر داده نوع متغیر خاص خود را دارد پس باید با انواع متغیر در ++C آشنا شویم.
انواع داده عددی
به طور کلی در ++C دو نوع اصلی داده وجود دارد: «نوع صحیح» و «نوع ممیز شناور». همۀ انواع دیگر از روی این دو نوع ساخته می شوند.
نوع صحیح
نوع صحیح برای نگهداری اعداد صحیح (اعداد ۰ و ۱ و ۲ و غیره) استفاده میشود. این اعداد بیشتر برای شمارش به کار میروند و دامنه محدودی دارند.
متغیر عدد صحیح
در ++C شش نوع متغیر عدد صحیح وجود دارد تفاوت این شش نوع مربوط به میزان حافظه مورد استفاده و محدوده مقادیری است که هر کدام میتوانند داشته باشند. این میزان حافظۀ مورد استفاده و محدوده مقادیر، بستگی زیادی به سختافزار و همچنین سیستم عامل دارد. جدول زیر حداقل و حداکثر ظرفیت متغیر ها از نوع صحیح را در ++C نشان میدهد.
حداکثر ظرفیت پذیرش | حداقل ظرفیت پذیرش | نوع متغیر |
۳۲۷۶۷ | ۳۲۷۶۸- | short |
۶۵۵۳۵ | ۰ | unsigned short |
۲۱۴۷۴۸۳۶۴۷ | ۲۱۴۷۴۸۳۶۴۸- | int |
۴۲۹۴۹۶۷۲۹۵ | ۰ | unsigned int |
۲۱۴۷۴۸۳۶۴۷ | ۲۱۴۷۴۸۳۶۴۸- | long |
۴۲۹۴۹۶۷۲۹۵ | ۰ | unsigned long |
محاسبات اعداد صحیح
++C مانند اغلب زبانهای برنامهنویسی برای محاسبات از عملگرهای جمع (+)، تفریق (-)، ضرب (*)، تقسیم (/) و باقیمانده (%) استفاده میکند.
عملگرهای افزایشی و کاهشی
زبان برنامه نویسی ++C برای دستکاری مقدار متغیرهای صحیح، دو عملگر جالب دیگر دارد:
- عملگر ++: مقدار یک متغیر را یک واحد افزایش میدهد.
- عملگر —: مقدار یک متغیر را یک واحد کاهش میدهد.
اما هر کدام از این عملگرها دو شکل متفاوت دارند: شکل «پیشوندی» و شکل «پسوندی».
در شکل پیشوندی، عملگر قبل از نام متغیر میآید مثل m++ یا n–. در شکل پسوندی، عملگر بعد از نام متغیر میآید مثل ++m یا –n . در شکل پیشوندی ابتدا متغیر، متناسب با عملگر، افزایش یا کاهش مییابد و پس از آن مقدار متغیر برای محاسبات دیگر استفاده میشود. در شکل پسوندی ابتدا مقدار متغیر در محاسبات به کار میرود و پس از آن مقدار متغیر یک واحد افزایش یا کاهش مییابد. به مثال زیر توجه کنید.
int main() { int x=10; int y=10; cout << "x++ is : " <<x++; cout<<endl; cout << "++y is : " <<++y; return 0; }
پس از اجرای برنامه بهخوبی متوجه خواهید بود که چه فرقی بین شکل پیشوندی و پسوندی وجود دارد. ما در کد بالا به هر دو متغیر x و y مقدار یکسان ۱۰ را دادهایم. برای چاپ کردن هر کدام ابتدا ++x را چاپ میکنیم. در اینجا عدد ۱۰ برای ما چاپ میشود و سپس ۱ واحد x افزایش مییابد. ولی در مورد y ابتدا این متغیر یک واحد افزایش پیدا میکند سپس چاپ میشود یعنی عدد ۱۱.
عملگرهای مقدارگذاری مرکب
در ++C عملگرهای دیگری دارد که مقدارگذاری در متغیرها را تسهیل مینمایند. مثلا با استفاده از عملگر =+ میتوانیم هشت واحد به m اضافه کنیم اما با دستور کوتاهتر:
;m += 8
دستور بالا معادل دستور ;m = m + 8 است با این تفاوت که کوتاهتر است. به عملگر =+ «عملگر مرکب» میگویند زیرا ترکیبی از عملگرهای + و = میباشد. قبلاً از عملگر = برای مقدارگذاری در متغیرها استفاده کردیم. ++C عملگرهای دیگری دارد که مقدارگذاری در متغیرها را تسهیل مینمایند. عملگر مرکب در C++ عبارتند از: =+ و =- و =* و =/ و =% که نحوه عملکرد آنها بهصورت زیر است. (معادل هر عبارت)
m += 8; → m = m + 8
m -= 8; → m = m – ۸
m *= 8; → m = m * 8
m /= 8; →m = m / 8
m %= 8; →m = m % 8
نوع کاراکتری char
یکی دیگر از انواع متغیر در ++C نوع کاراکتری یا Char است. یک کاراکتر یک حرف، رقم یا نشانه است که یک شماره منحصر به فرد دارد. به بان سادهتر دیگر، هر کلیدی که روی صفحهکلید یک کاراکتر است. مثلا هر یک از حروف ‘A’ تا ‘Z’ و ‘a’ تا ‘z’ و هر یک از اعداد ‘۰’ تا ‘۹’ و یا نشانههای ‘~’ تا ‘+’ روی صفحهکلید را یک کاراکتر مینامند. برای تعریف متغیری از نوع کاراکتر از کلمه کلیدی char استفاده میکنیم. یک کاراکتر باید درون دو علامت آپستروف (‘) محصور شده باشد. پس ‘A’ یک کاراکتر است؛ همچنین ‘۸’ یک کاراکتر است اما ۸ یک کاراکتر نیست بلکه یک عدد صحیح است.
مثال
char c ='A';
نوع شمارشی enum
نوع شمارشی یک نوع صحیح است که توسط کاربر مشخص میشود. نحو اعلان یک نوع شمارشی به شکل زیر است:
enum typename{enumerator-list}
که enum کلمهای کلیدی است، typename نام نوع جدید است که کاربر مشخص میکند و enumerator-list مجموعه مقادیری است که این نوع جدید میتواند داشته باشد. به عنوان مثال به تعریف زیر دقت کنید:
enum Day{SAT,SUN,MON,TUE,WED,THU,FRI}
حالا Day یک نوع جدید است و متغیرهایی که از این نوع تعریف میشوند می توانند یکی از مقادیر SAT و SUN و MON و TUE و WED و THU و FRI را داشته باشند:
Day day1,day2;
day1 = MON;
day2 = THU;
وقتی نوع جدید Day و محدوده مقادیرش را تعیین کردیم، میتوانیم متغیرهایی از این نوع جدید بسازیم. در کد بالا متغیرهای day1 و day2 از نوع Day تعریف شدهاند. آنگاه day1 با مقدار MON و day2 با مقدار THU مقداردهی شده است.
مثال
#include <iostream> using namespace std; enum Day {SAT,SUN,MON,TUE,WED,THU,FRI}; int main() { Day day1,day2; day1 = MON; day2 = THU; cout << "day1 : " <<day1<<endl; cout << "day2 : " <<day2<<endl; return 0; }
خروجی برنامه
day1 : 2 day2 : 5
مقادیر SAT و SUN و … هر چند که به همین شکل به کار میروند اما در کامپیوتر به شکل اعداد صحیح ۰ و ۱ و ۲ و … ذخیره میشوند. به همین دلیل است که به هر یک از مقادیر SAT و SUN و … یک شمارشگر میگویند. میتوان مقادیر صحیح دلخواهی را به شمارشگرها نسبت داد:
enum Day{SAT=1,SUN=2,MON=4,TUE=8,WED=16,THU=32,FRI=64}
اگر فقط بعضی از شمارشگرها مقداردهی شوند، آنگاه سایر شمارشگرها که مقداردهی نشدهاند مقادیر متوالی بعدی را خواهند گرفت:
enum Day{SAT=1,SUN,MON,TUE,WED,THU,FRI}
دستور بالا مقادیر ۱ تا ۷ را به ترتیب به روزهای هفته تخصیص خواهد داد.
همچنین دو یا چند شمارشگر در یک لیست میتوانند مقادیر یکسانی داشته باشند:
enum Answer{NO=0,FALSE=0,YES=1,TRUE=1,OK=1}
نوع بولین bool
نوع bool یک نوع صحیح است که متغیرهای این نوع فقط میتوانند مقدار true یا false داشته باشند. true به معنی درست و false به معنی نادرست است.
اما این مقادیر در اصل به صورت ۱ و ۰ درون کامپیوتر ذخیره میشوند: ۱ برای true و ۰ برای false.
انواع ممیز شناور
در ادامه بحث انواع متغیر در ++C به مبحث اعداد ممیز شناور میرسیم. عدد ممیز شناور به بیان ساده همان عدد اعشاری است. عددی مانند ۱۲۳.۴۵ یک عدد اعشاری است. برای این که مقدار این عدد در کامپیوتر ذخیره شود، ابتدا باید به شکل دودویی تبدیل شود:
۱۲۳.۴۵ = (۱۱۱۱۰۱۱.۰۱۱۱۰۰۱)۲
اکنون برای مشخص نمودن محل اعشار در عدد، تمام رقمها را به سمت راست ممیز منتقل میکنیم. البته با هر جابهجایی ممیز، عدد حاصل باید در توانی از ۲ ضرب شود:
۱۲۳.۴۵ = 0.۱۱۱۱۰۱۱۰۱۱۱۰۰۱× ۲۷
به مقدار ۱۱۱۱۰۱۱۰۱۱۱۰۰۱ «مانتیس عدد» و به ۷ که توان روی دو است، «نمای عدد» گفته می شود. در سی پلاس پلاس ++C سه نوع ممیز شناور داریم.
- معمولا نوع float از چهار بایت برای نگهداری عدد استفاده میکند.
- نوع double از هشت بایت برای نگهداری عدد استفاده میکند.
- نوع long double از هشت یا ده یا دوازده یا شانزده بایت برای نگهداری عدد استفاده میکند.
تعریف متغیر ممیز شناور
در مبحث انواع متغیر در ++C، تعریف متغیر ممیز شناور مانند تعریف متغیر صحیح است. با این تفاوت که از کلمه کلیدی float یا double برای مشخص نمودن نوع متغیر استفاده میکنیم.
float x; double x,y=0;
تفاوت نوع float با نوع double در این است که نوع double دو برابر float از حافظه استفاده میکند. پس نوع double دقتی بسیار بیشتر از float دارد. به همین دلیل محاسبات double وقتگیرتر از محاسبات float است.
سخن آخر
در این مقاله درمورد انواع متغیرها در زبان برنامه نویسی سی پلاس پلاس صحبت شد. در درس بعدی با مقاله معرفی دستورات شرطی و انتخاب در ++C در خدمت شما عزیزان خواهیم بود.