زبان C – انواع متغیر و داده (جلسه ۲)
زمان تقریبی مطالعه این مقاله: ۵ دقیقه
سلام به دوستان عزیز میکرولرنی 🙂 🙂 🙂
این مقاله در ۱۱ اردیبهشت ۱۴۰۰ به روز رسانی شده.
در جلسه قبل، مقدماتی در مورد زبان C گفتیم تا آشنایی اولیه به دست بیارید. اما در این جلسه میخواهیم در مورد “متغیر در زبان C” و به شکلی کلیتر “داده در زبان C” صحبت کنیم. در برنامه نویسی وقتی شما قراره یک سری اطلاعات بفرستید، دریافت کنید یا باهاش هر کاری انجام بدید باید اون را یک جایی ذخیره کنید و بدونید که از چه نوعی هست. اینجا استفاده از متغیرها و آشنایی با نوع اونها معنی پیدا میکنه. پس با میکرولرن، مرجع برنامه نویسی C همراه باشید تا متغیرها را خوب بشناسید.
انوع داده در زبان C
به منظور پردازش اطلاعات در کامپیوتر نیاز است تا توسط زبان C انواع مختلفی از دادهها تعریف شوند. این دادهها میتوانند ثابت و یا متغیر باشند. دادههای ثابت در طول برنامه تغییر نمیکنند، ولی دادههای متغیر در طول برنامه میتوانند بارها عوض شوند. در زبان C دو نوع داده ساده و مرکب وجود دارد که در جدول زیر قابل مشاهده هستند. اما در این جلسه دادههای ساده را بررسی میکنیم.
کاراکتر
وقتی صحبت از متغیر در زبان C میشود، ابتدا به سادهترین نوع فکر میکنیم یکی از انواع متغیرهایی که در برنامهنویسی استفاده میشود دادههای کاراکتری است. در بسیاری از زبانهای برنامهنویسی دادههای عددی و دادههای کاراکتری با یکدیگر تفاوت دارند. مثلاً عدد ۲ دادهای عددی و حرف A دادهای کاراکتری است. در عمل، کاراکترها به صورت عدد در حافظه کامپیوتر ذخیره میشوند، و هر کاراکتر دارای یک کد عددی است.
در همه کدگذاری ها برای هر کاراکتر نماد عددی وابستهای وجود دارد که در کدگذاری اسکی به آن ASCII Code گویند و مقدار آن از صفر تا ۲۵۵ است. برای ذخیره سازی یک داده از نوع کاراکتر به یک بایت فضای حافظه نیاز است. برای تعریف یک داده از نوع کاراکتر میتوان به این شکل از char استفاده کرد:
<نام متغیر> <نوع متغیر>;
char x;
signed char temp;
همان طور که در مثال می بینید ابتدا باید نوع متغیر را مشخص کنیم که برای نوع داده ی کاراکتر با char مشخص می شود. سپس نام متغیر را به صورت دلخواه انتخاب می کنیم. توجه کنید که نام گذاری متغیرها باید طبق قوانین نام گذاری زبان سی انجام شود. این قواین بدین صورت هستند:
- در نام یک متغیر فقط حروف بزرگ و کوچک انگلیسی، عدد و _ مجاز است.
- نام یک متغیر نمیتواند با عدد شروع شود.
- نام یک متغیر میتواند با حروف الفبا یا _ شروع شود.
- به کار بردن عدد در نام متغیر به جز اولین کاراکتر مجاز است.
حال اگر بخواهیم در این متغیر چیزی ذخیره کنیم میتوانیم بنویسم ‘x=’b که این کار باعث میشود کد اسکی حرف b در متغییر x ذخیره شود. برای مشاهده کد اسکی کاراکترهای مختلف اینجا کلیک کنید.
بیان این نکته ضروری است که کاراکترها با یک جفت علامت single Quotes محصور میشوند، بنابراین ۵ با ‘۵’ تفاوت دارد، چرا که اولی خود عدد ۵ است ولی دومی کد اسکی برای نمایش این عدد است که برابر با ۵۳ میباشد.
نوع داده کاراکتر، به طور پیشفرض بدون علامت است. یعنی برای نگهداری اعداد یک بایتی (محدوهی ۰ تا ۲۵۵) میتوان از نوع char استفاده کرد. ولی اگر بخواهیم اعداد علامتدار را در آن ذخیره کنیم میتوانیم از توصیف کننده signed به شکل signed char استفاده کنیم. در این صورت محدودهی ۱۲۸- تا ۱۲۷ را میتوانیم پوشش دهیم.
عدد صحیح
به طور کلی اعداد صحیح مثبت، منفی و صفر، ۱۶ یا ۳۲ بیت حافظه اشغال میکنند. برای مشخص کردن این نوع داده از int استفاده می شود. تعریف یک متغیر از این نوع مانند نوع داده کاراکتر است اما با این تفاوت که به جای char از int استفاده می شود. اندازه یا بزرگی این متغیر برحسب نوع ماشین و کامپایلر فرق میکند اما معمولا دادهی int به صورت ۲ بایتی یا ۱۶ بیتی در نظر گرفته میشود.
در هنگام تعریف متغیرهایی از نوع int توصیفکنندههای short ،long ، signed، unsigned و یا ترکیبی از آنها نیز ممکن است به کار رود.
توضیح این نکته ضروری است که استفاده از توصیف کننده long قبل از int سایز آن را (که دادهای ۱۶ بیتی است) به دوبرابر یعنی ۳۲ بیت افزایش خواهد داد. البته در هر کامپایلری باید به بخش Help آن مراجعه کرد. چرا که در بعضی کامپایلرها در حالت عادی ۱۶ بیت و در بعضی دیگر ۳۲ بیت برای int در نظر گرفته میشود.
اگر حالت عادی ۱۶ بیتی باشد می توان از int یا short int که یکسان هستند استفاده کرد و استفاده از long int سایز متغییر را دو برابر میکند. اما اگر در حالت عادی کامپایلر، سایز int برابر با ۳۲ بیت باشد فرقی بین int یا long int نیست و یک متغییر ۴ بایتی تولید می شود. در این حالت باید برای تولید متغییر ۲ بایتی، حتما از توصیف کننده short استفاده کرد. به مثال زیر دقت کنید:
int x1;
long int x2;
unsigned short int x3;
اگر فرض کنیم که کامپایلر به صورت پیش فرض برای int سایز ۱۶ بیتی در نظر می گیرد، آن گاه متغیر x1 در خط اول ۱۶ بیتی و x2 در خط دوم ۳۲ بیتی است. در خط سوم x3 همان ۱۶ بیتی خواهد ماند. برای حالت پیش فرض ۳۲ بیتی خودتان بررسی کنید.
نکتهی دیگر در مود متغییرهای عدد صحیح دوبایتی این است که در حالت بدون علامت محدوده ۰ تا ۶۵۵۳۵ را میتوانند پوشش دهند. متغیرهایی که معرف اعداد صحیحاند به صورتهای زیر توصیف میشوند.
unsigned int x1;
signed int x2;
short int x3;
long int x4;
unsigned long int x5;
unsigned short int x6;
عدد اعشاری
در زبان C میتوان دادههایی از نوع اعشاری و به بیان دیگر ممیز شناور (floating point) را ذخیره نمود. استفاده از این نوع دادهها برای مقادیر خیلی کوچک و کسری یا مقادیر بزرگ با دقت بالا کاربرد دارد. برای تعریف این نوع متغییر دو کلمه کلیدی به نام float و double استفاده میشود که double از double precesion به معنای دقت دوبرابر گرفته شده است و حجم حافظهای دو برابر float را اشغال میکند.
هر متغییر از نوع float حجمی برابر با ۴ بایت حافظه را اشغال میکند. برای این نوع متغییر هم میتوان از توصیف کنندهها استفاده نمود و اعداد مثبت و منفی اعشاری را ذخیره کرد. برای توضیحات بیشتر در مورد این نوع متغییر میتوان به Help کامپایلر مراجعه کرد. به مثال زیر توجه کنید:
float temperature;
temperature = 12.87;
در مثال بالا ابتدا متغیری با نام temperature به معنی دما و از نوع float تعریف شده است. سپس در خط دوم عدد اعشاری ۱۲/۸۷ در این متغیر ذخیره شده است. چنین متغیری ۴ بایت فضای ذخیره سازی نیاز دارد.
اگر از double به جای float استفاده کرده بودیم چند بایت فضای ذخیره سازی لازم بود؟
سخن آخر
امیدوارم که از جلسه امروز چیزهای خوبی یاد گرفته باشی و با متغیر در زبان C آشنا شده باشی. توصیه میکنم نرم افزار code blocks را از اینجا دانلود کنی و همین کارهایی را که انجام دادیم داخل کامپایلر تمرین کنی تا دستت راه بیوفته. اگر هم دوست داشته باشی میتونی با کمپایلرهای آنلاین مثل اینجا کار کنی.
اما هنوز یک قسمت دیگه از دادههای ساده به نام اشارهگر باقی مونده که در جلسه سوم زبان C در موردش صحبت میکنیم. بهتره به این نکته اشاره کنم که تا پایان جلسه ۷ تمام انواع داده ها در زبان سی را بررسی می کنیم. حالا اگه آماده هستی میتونی وارد جلسه سوم بشی و مطالعه را ادامه بدی.
اما یک پیشنهاد رد نشدنی دارم برای کسانی که از آموزشهای میکرولرن خوششون اومده. یک دوره جامع آموزش زبان C طراحی کردیم که از سیر تا پیاز زبان C با کلی تمرین و پروژه داخلش تدریس شده. روی عکس زیر کلیک کن و با دقت توضیحات دوره را بخون. مطمئنم اگه این دوره را شرکت کنی یه حرفهای در زبان C میشی. 🙂
PDF مقاله را از لینک زیر دانلود کنید
برای مشاهده لینک دانلود لطفا وارد حساب کاربری خود شوید!
وارد شویدپسورد فایل : ندارد گزارش خرابی لینک
گزارش مشکلات فنی
درباره احسان عبداللهی
مدیر و موسس میکرولرن | برنامه نویسی پاسخی ظریف به یک نیاز در دنیای واقعی هست.
نوشته های بیشتر از احسان عبداللهیمطالب زیر را حتما مطالعه کنید
دوره های آموزشی مرتبط
آموزش جنگو
آموزش پایتون
آموزش الگوریتم و فلوچارت – تفکر برنامه نویسی
آموزش برنامه نویسی C برای میکروکنترلر
آموزش الکترونیک دیجیتال
11 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
خیلی شفاف و بدون ابهام توضیح میدیدن مهندس عبداللهی.
متشکرم که سایتی به این خوبی برای بچه های الکترونیک راه انداختید.
درود بر شما
متشکرم
سلام ممنون از اموزش خوبتون شما به جاوا نیز مسلط هستید؟
سلام. خواهش میکنم. خیر بنده جاوا کار نمیکنم
باسلام . یک سوال دارم . وقتی در کدویژن یک متغیر را تعریف می کنم و در خط بعد به آن متغیر مقداری می دهم کدویژن در همان خط (یعنی خطی که در آن به متغیر مقدار داده ام) ارور (error) می دهد و می گوید : expected’ )’ . لطفا بگویید برای حل این مشکل چه کار باید بکنم.
با تشکر از شما به خاطر آموزش های فوق العاده تان .
خواستم ببینم با یادگیری میکرو چه حجمی از زبان c رو یاد میگیرم چون قراره با یه سری نرم افزارهای دیگه که c fundomental هستند هم کار کنم بجز میکرو.
به هر حال مچکر.
هر قسمتی از زبان c به جز قسمت مربوط به گرافیک در زبان سی را لازم هست که شما برای میکرو خوب بلد باشید. ولی برای شروع همون مفاهیم مقدماتی مثل تابع، حلقه، آرایه و متغیر کافیه. به مرور زمان میتونید سطحتون را بالا بیارید.
موفق باشید
سلام مهندس برنامه ای رو که شما اینجا باهاش کد نوشتید چیه visualstudio ؟
خیلی سایت خوبی دارید ممنونم زبان c رو برا میکرو با شما استارت زدم. خدا قوت.
سلام به شما که با انگیره استارت زدید و به ما روحیه میدید تا مطالب با کیفیت تری براتون تهیه کنیم. 😉
ابتدا یه نکته ای را بگم. چون زبان سی را ما قرار نیست در حد رشته های کامپیوتر بلد باشیم داخل سایت ما فقط اون چیزایی را یاد می گیرید که برای کد نویسی میکرو لازم دارید و از این نظر کامله ولی اگه نیاز به مطالب اضافه تر دارید می تونید به کتاب های زبان سی مراجعه کنید.
محیط های برنامه نویسی برای زبان سی زیاد هست. ما اینجا تاکید روی محیط خاصی برای کدنویسی نکردیم میتونید از visual studio یا eclipse استفاده کنید. اما چون در نهایت برای میکرو میخواید کدبزنید مبرسید به اون IDE که برای میکروی مورد نظرتون نوشته شده مثل codevision یا atmel studio. اما برای اینکه زبان سی را در ابتدا خوب یاد بگیرید پیشنهادم همون visual studio هست. بازم سوالی داشتید در خدمت هستم. 🙂
مرسی از شما که زکات علمتونو با آموزشه بی منت میدید و از این راه به خلق الله و جامعتون خدمت میکنید و انسان مفیدی هستید.
مهندس ، حدودا چند درصد از کدها و دستورات c تو میکرو استفاده میشه.
میخوام بدونم اون مطالب اضافی که فرمودید از کتابا پیگیری کنم زیادن ؟
شما لطف دارید. این وظیفه ی ماست.
ببینید نمیشه خیلی درصد گفت. اما این طور بگم بهتره. تمام اون چیزی که برای کدنویسی میکرو لازم دارید در سایت ما موجود هست. اما طبیعتا داخل سایت نمیشه مثل کتاب تمام جزئیات را ذکر کرد. برای همین پیشنهادم اینه که شما تمام مباحث را از سایت مطالعه بفرمایید هرجایی که احساس کردید نیاز به مطالعه عمیق تری وجود داره از مراجع اصلی استفاده کنید.