دوشنبه , ۳۰ اردیبهشت ۱۳۹۸
آخرین مطالب
LINK TABLES
خانه | برنامه‌نویسی | زبان C – انواع داده (جلسه ۲)

زبان C – انواع داده (جلسه ۲)

با سلامی گرم به شما دوستای خوب جلسه دوم زبان C را شروع می‌کنیم. جلسه قبل که بحثای مقدماتی و ضرورت‌های زبان C را مرو کردیم. و اما امروز می‌خواهیم داده‌ها را بررسی کنیم.

به منظور پردازش اطلاعات در کامپیوتر نیاز است تا در زبان C انواع مختلفی از داده ها تعریف شوند که می‌توانند ثابت و یا متغیر باشند. داده‌های ثابت در طول برنامه تغییر نمی‌کنند، ولی داده‌های متغیر در طول برنامه می‌توانند بارها عوض بشوند. در زبان C دو نوع داده ساده و مرکب وجود دارد.

نوع داده‌های ساده شامل موارد زیر می‌شوند:

  • کاراکتر
  • عدد صحیح
  • عدد اعشاری
  • اشاره گر

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

  • آرایه
  • رشته
  • Structure

اکنون توضیح مختصری در مورد هر کدام از داده‌های ساده می‌دهیم.

کاراکتر

یکی از انواع داده‌‌هایی که در برنامه‌‌نویسی استفاده می‌شود داده‌‌های کاراکتری است. در بسیاری از زبانهای برنامه‌‌‌نویسی داده‌های عددی و داده‌های کاراکتری با یکدیگر تفاوت دارند. مثلاً عدد ۲ داده‌ای عددی و حرف A داده‌ای کاراکتری است. در عمل، کاراکترها به صورت عدد در حافظه کامپیوتر ذخیره می‌شوند، و هر کاراکتر دارای یک کد عددی است. در همه کدگذاری ها برای هر کاراکتر نماد عددی وابسته‌ای وجود دارد که در کدگذاری اسکی به آن ASCII Code گویند و مقدار آن از صفر تا ۲۵۵ است. برای ذخیره سازی یک داده از نوع کاراکتر به یک بایت فضای حافظه نیاز است. برای تعریف یک داده از نوع کاراکتر می‌توان به این شکل عمل کرد:

همان طور که در مثال می بینید ابتدا باید نوع متغیر را مشخص کنیم که برای نوع داده ی کاراکتر با char مشخص می شود. سپس نام متغیر را به صورت دلخواه انتخاب می کنیم. توجه کنید که نام گذاری متغیرها باید طبق قوانین زبان سی انجام شود. حال اگر بخواهیم در این متغییر چیزی بارگذاری کنیم می‌توانیم بنویسم ‘x=’b که این کار باعث می‌شود کد اسکی حرف b در متغییر x ذخیره شود. بیان این نکته ضروری است که کاراکترها با یک جفت علامت single Quotes محصور میشوند، بنابراین ۵ با ‘۵’ تفاوت دارد، چرا که اولی خود عدد ۵ است ولی دومی کد اسکی برای نمایش این عدد است که برابر با ۵۳ می‌باشد. این نوع داده به طور پیش‌فرض بدون علامت است، ولی اگر بخواهیم اعداد علامت‌دار را در آن ذخیره کنیم می‌توانیم از signed char استفاده کنیم. در این صورت محدوده‌ی ۱۲۸- تا ۱۲۷ را می‌توانیم پوشش دهیم. هم چنین برای نگهداری اعداد یک بایتی (محدوه‌ی ۰ تا ۲۵۵) نیز می‌توان از نوع 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 سایز ۱۶ بیتی در نظر می گیرد، آن گاه متغیر rpm در خط اول ۱۶ بیتی و در خط دوم ۳۲ بیتی است. در خط سوم rpm همان ۱۶ بیتی خواهد ماند. اگر حالت پیش فرض ۳۲ بیتی باشد خودتان بررسی کنید.

نکته‌ی دیگر در مود متغییرهای عدد صحیح دوبایتی این است که در حالت بدون علامت محدوده ۰ تا ۶۵۵۳۵ را می‌توانند پوشش دهند. متغیرهایی که معرف اعداد صحیح‌‌اند به صورتهای زیر توصیف می‌شوند.

 

عدد اعشاری

در زبان C می‌توان داده‌هایی از نوع اعشاری و به بیان دیگر ممیز شناور (floating point) را ذخیره نمود. استفاده از این نوع داده‌ها برای مقادیر خیلی کوچک و کسری یا مقادیر بزرگ با دقت بالا کاربرد دارد. برای تعریف این نوع متغییر دو کلمه کلیدی به نام float و double استفاده می‌شود که double از double precesion به معنای دقت دوبرابر گرفته شده است و حجم حافظه‌ای دو برابر float را اشغال می‌کند. هر متغییر از نوع float حجمی برابر با ۴ بایت حافظه را اشغال می‌کند. برای این نوع متغییر هم می‌توان از توصیف کننده‌ها استفاده نمود و اعداد مثبت و منفی اعشاری را ذخیره کرد. برای توضیحات بیشتر در مورد این نوع متغییر می‌توان به Help کامپایلر مراجعه کرد. به مثال زیر توجه کنید:

در مثال بالا ابتدا متغیری با نام temperature به معنی دما و از نوع float تعریف شده است. سپس در خط دوم عدد اعشاری ۱۲/۸۷ در این متغیر ذخیره شده است. چنین متغیری ۴ بایت فضای ذخیره سازی نیاز دارد. اگر از double به جای float استفاده کرده بودیم چند بایت فضای ذخیره سازی لازم بود؟

امیدوارم که از جلسه امروز چیزای خوبی یاد گرفته باشی. هنوز یک قسمت دیگه از داده‌های ساده به نام اشاره‌گر باقی مونده. اگه جلسه دیگه هم با ما همراه باشی، در بارش صحبت می‌کنیم. بهتره به این نکته اشاره کنم که تا پایان جلسه ۷ تمام انواع داده ها در زبان سی را بررسی می کنیم:

درباره ی احسان عبداللهی

احسان عبداللهی هستم | کارشناسی الکترونیک خوندم و کارشناسی ارشد مخابرات |در سال 94 وب سایت میکرولرن را راه اندازی کردم | سعی کردم هر چیزی را به صورت کاربردی دنبال کنم، برای همین از کارشناسی کار با میکروکنترلرهای AVR و ARM، برنامه نویسی C و طراحی PCB را به صورت تخصصی کار کردم و از کارشناسی ارشد برنامه نویسی پایتون ، Computer vision و deep learning را به صورت تخصصی و کاربردی شروع کردم | الان هم سعی میکنم همیشه خودم را به روز نگه دارم و لذت کار کردن با دنیای برنامه نویسی و امبدد سیستم ها را به دیگران انتقال بدم

۹ دیدگاه

  1. سلام ممنون از اموزش خوبتون شما به جاوا نیز مسلط هستید؟

  2. باسلام . یک سوال دارم . وقتی در کدویژن یک متغیر را تعریف می کنم و در خط بعد به آن متغیر مقداری می دهم کدویژن در همان خط (یعنی خطی که در آن به متغیر مقدار داده ام) ارور (error) می دهد و می گوید : expected’ )’ . لطفا بگویید برای حل این مشکل چه کار باید بکنم.
    با تشکر از شما به خاطر آموزش های فوق العاده تان .

  3. خواستم ببینم با یادگیری میکرو چه حجمی از زبان c رو یاد میگیرم چون قراره با یه سری نرم افزارهای دیگه که c fundomental هستند هم کار کنم بجز میکرو.
    به هر حال مچکر.

    • هر قسمتی از زبان c به جز قسمت مربوط به گرافیک در زبان سی را لازم هست که شما برای میکرو خوب بلد باشید. ولی برای شروع همون مفاهیم مقدماتی مثل تابع، حلقه، آرایه و متغیر کافیه. به مرور زمان میتونید سطحتون را بالا بیارید.
      موفق باشید

  4. سلام مهندس برنامه ای رو که شما اینجا باهاش کد نوشتید چیه visualstudio ؟
    خیلی سایت خوبی دارید ممنونم زبان c رو برا میکرو با شما استارت زدم. خدا قوت.

    • سلام به شما که با انگیره استارت زدید و به ما روحیه میدید تا مطالب با کیفیت تری براتون تهیه کنیم. 😉
      ابتدا یه نکته ای را بگم. چون زبان سی را ما قرار نیست در حد رشته های کامپیوتر بلد باشیم داخل سایت ما فقط اون چیزایی را یاد می گیرید که برای کد نویسی میکرو لازم دارید و از این نظر کامله ولی اگه نیاز به مطالب اضافه تر دارید می تونید به کتاب های زبان سی مراجعه کنید.
      محیط های برنامه نویسی برای زبان سی زیاد هست. ما اینجا تاکید روی محیط خاصی برای کدنویسی نکردیم میتونید از visual studio یا eclipse استفاده کنید. اما چون در نهایت برای میکرو میخواید کدبزنید مبرسید به اون IDE که برای میکروی مورد نظرتون نوشته شده مثل codevision یا atmel studio. اما برای اینکه زبان سی را در ابتدا خوب یاد بگیرید پیشنهادم همون visual studio هست. بازم سوالی داشتید در خدمت هستم. 🙂

      • مرسی از شما که زکات علمتونو با آموزشه بی منت میدید و از این راه به خلق الله و جامعتون خدمت میکنید و انسان مفیدی هستید.
        مهندس ، حدودا چند درصد از کدها و دستورات c تو میکرو استفاده میشه.
        میخوام بدونم اون مطالب اضافی که فرمودید از کتابا پیگیری کنم زیادن ؟

        • شما لطف دارید. این وظیفه ی ماست.
          ببینید نمیشه خیلی درصد گفت. اما این طور بگم بهتره. تمام اون چیزی که برای کدنویسی میکرو لازم دارید در سایت ما موجود هست. اما طبیعتا داخل سایت نمیشه مثل کتاب تمام جزئیات را ذکر کرد. برای همین پیشنهادم اینه که شما تمام مباحث را از سایت مطالعه بفرمایید هرجایی که احساس کردید نیاز به مطالعه عمیق تری وجود داره از مراجع اصلی استفاده کنید.

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

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