همه انواع داده ج. انواع داده ها تعیین نوع Postfix

همه داده ها در C نوع خاص خود را دارند. متغیرهای نوع خاصی در حافظه جای خاصی را اشغال می کنند که بسته به نوع آنها متفاوت است. در C، تخصیص واضحی از مقدار حافظه به انواع خاصی وجود ندارد. این به اجرای یک کامپایلر خاص برای یک پلتفرم خاص واگذار می شود. به عنوان مثال، متغیری مانند بین المللی در یک کامپایلر می تواند 16 بیت در حافظه اشغال کند، در دیگری - 32 بیت، در سوم - 8 بیت. همه چیز توسط یک کامپایلر خاص تعیین می شود. درست است، همه برای جهانی شدن تلاش می کنند، و اساساً در اکثر کامپایلرها نوع بین المللی برای مثال، 2 بایت را اشغال می کند و نوع کاراکتر - یکی

من اخیراً کمی صریح بوده‌ام، نمی‌توانم به خاطر بیاورم که یک تایپ چند بایت می‌گیرد دو برابر V AVR-GCC. معمولاً هنگام برنامه نویسی کنترلرها با انواع عدد صحیح کار می کنید، مانند بین المللی و کاراکتر ، و به دلیل مصرف منابع آنها به ندرت به انواع ممیز شناور متوسل می شوید.

بنابراین، برای آینده، در اینجا یادداشتی برای خودم می گذارم که اندازه حافظه اشغال شده توسط انواع داده برای کامپایلر AVR-GCC و محدوده متغیرهای این نوع را نشان می دهد.

انواع داده در زبان C برای کامپایلر AVR-GCC

تایپ کنید اندازه در
بایت (بیت)
تغییر فاصله
کاراکتر 1 (8) -128 .. 127
کاراکتر بدون امضا 1 (8) 0 .. 255
کاراکتر امضا شده 1 (8) -128 .. 127
بین المللی 2 (16) -32768 .. 32767
بدون امضا 2 (16) 0 .. 65535
امضا شده 2 (16) -32768 .. 32767
داخلی کوتاه 2 (16) -32768 .. 32767
بدون امضا کوتاه 2 (16) 0 .. 65535
امضا کوتاه بین المللی 2 (16) -32768 .. 32767
طولانی مدت 4 (32) -2147483648 .. 2147483647
بدون امضا طولانی int 4 (32) 0 .. 4294967295
امضای طولانی مدت 4 (32) -2147483648 .. 2147483647
شناور 4 (32) 3.4Е-38 .. 3.4Е+38
دو برابر 4 (32) 3.4Е-38 .. 3.4Е+38
دوبل بلند 10 (80) 3.4E-4932 .. 3.4E+4932

پیاده سازی را تایپ کنید دو برابردر AVR-GCC از استاندارد انحراف دارد. طبق استاندارد دو برابر 64 بیت را اشغال می کند. در AVR-GCC، متغیری از این نوع 32 بیت را اشغال می کند و بر این اساس، معادل متغیری با نوع است. شناور!

علاوه بر این، چندین مشتق از انواع استاندارد در کتابخانه‌های AVR-GCC معرفی شده‌اند. در فایل توضیح داده شده است. stdint.h . این احتمالاً برای بهبود دید و کاهش متن برنامه ها (سرعت نوشتن آنها :)) انجام شده است. در اینجا برچسب مطابق است:

انواع مشتق شده از استاندارد در زبان C برای کامپایلر AVR-GCC

نوع مشتق شده نوع استاندارد
int8_t کاراکتر امضا شده
uint8_t کاراکتر بدون امضا
int16_t امضا شده
uint16_t بدون امضا
int32_t امضای طولانی مدت
uint32_t بدون امضا طولانی int
int64_t امضا طولانی بین المللی
uint64_t بدون امضا طولانی طولانی بین

نوع خالی

یک نوع دیگر در زبان C وجود دارد - نوع خالی . خالی برای نشان دادن اینکه تابع چیزی را در نتیجه بر نمی گرداند یا هیچ پارامتری را به عنوان ورودی نمی پذیرد استفاده می شود. این نوع برای اعلان متغیرها استفاده نمی شود، بنابراین هیچ فضای حافظه ای را اشغال نمی کند.

یک نوع داده در برنامه نویسی مجموعه ای از دو مجموعه است: مجموعه ای از مقادیر و مجموعه ای از عملیات که می توان برای آنها اعمال کرد. به عنوان مثال، به نوع داده عدد صحیح اعداد غیر منفی، شامل مجموعه محدود اعداد طبیعی، می توانید عملیات جمع (+)، ضرب (*)، تقسیم عدد صحیح (/)، باقیمانده (%) و تفریق (-) را اعمال کنید.

یک زبان برنامه نویسی معمولاً دارای مجموعه ای از انواع داده های اولیه است - انواعی که توسط زبان برنامه نویسی به عنوان یک واحد داخلی پایه ارائه می شود. در C++، خالق زبان این گونه انواع را انواع بنیادی می نامد. انواع اساسی در C++ عبارتند از:

  • بولی (بول)؛
  • شخصیت (به عنوان مثال، کاراکتر)؛
  • عدد صحیح (به عنوان مثال int)؛
  • نقطه شناور (به عنوان مثال شناور)؛
  • enums (تعریف شده توسط برنامه نویس)؛
  • خالی .

در بالای موارد فوق، انواع زیر ساخته شده است:

  • اشاره گر (به عنوان مثال، int*)؛
  • آرایه ها (به عنوان مثال char)؛
  • مرجع (به عنوان مثال double&);
  • ساختارهای دیگر

بیایید به مفهوم یک کلمه (به عنوان مثال، 1، 2.4F، 25e-4، 'a'، و غیره) برویم: literal ورودی در کد منبع یک برنامه است که یک مقدار ثابت را نشان می دهد. به عبارت دیگر، Literal صرفاً نمایشی از یک شی (مقدار) از نوعی در کد برنامه است. C++ توانایی نوشتن مقادیر صحیح، مقادیر ممیز شناور، کاراکتر، بولی، مقادیر رشته را دارد.

Literal نوع صحیح را می توان به صورت زیر نوشت:

  • سیستم شماره 10. برای مثال 1205 ;
  • سیستم شماره هشتم با فرمت 0 + عدد. به عنوان مثال، 0142 ;
  • سیستم شماره شانزدهم با فرمت 0x + عدد. به عنوان مثال، 0x2F.

24، 030، 0x18 همه ورودی‌های یکسانی هستند سیستم های مختلفحساب کردن
برای نوشتن اعداد ممیز شناور، از علامت نقطه استفاده می شود: 0.1، 0.5، 4. - یا در
نماد نمایی - 25e-100. در چنین رکوردی نباید هیچ فاصله ای وجود داشته باشد.

نامی که می توانیم مقادیر نوشته شده توسط literals را با آن مرتبط کنیم متغیر نامیده می شود. متغیر یک مکان نامگذاری شده یا آدرس پذیر دیگری در حافظه است که آدرس آن می تواند برای دسترسی به داده ها استفاده شود. این داده ها در حین اجرای برنامه به روش خاصی در حافظه نوشته، بازنویسی و پاک می شوند. متغیر به شما امکان می دهد در هر زمان به داده ها دسترسی داشته باشید و در صورت لزوم آنها را تغییر دهید. داده هایی که می توانند از نام متغیر بازیابی شوند، مقدار متغیر نامیده می شوند.
برای استفاده از یک متغیر در برنامه باید آن را اعلان کرد و در صورت لزوم می توان آن را تعریف کرد (= مقداردهی اولیه). یک اعلان متغیر در متن برنامه لزوماً شامل 2 بخش است: نوع پایه و اعلام کننده. مشخص کننده و اولیه بخش های اختیاری هستند:

const int مثال = 3; // اینجا const - specifier // int - نوع پایه // مثال - نام متغیر // = 3 - مقداردهی اولیه.

نام متغیر دنباله ای از کاراکترها از حروف الفبای لاتین (کوچک و بزرگ)، اعداد و/یا زیرخط است، اما کاراکتر اول نمی تواند رقمی باشد. نام متغیر باید به گونه ای انتخاب شود که همیشه به راحتی بتوان حدس زد که چه چیزی را ذخیره می کند، به عنوان مثال "monthPayment". به صورت انتزاعی و عملی، از نماد CamelCase برای قوانین نوشتن متغیرها استفاده می کنیم. نام یک متغیر نمی تواند با کلمات رزرو شده در زبان مطابقت داشته باشد، نمونه هایی از این کلمات: if، while، function، goto، switch و غیره.

اعلام کننده، علاوه بر نام متغیر، می تواند شامل کاراکترهای اضافی نیز باشد:

  • * - اشاره گر؛ قبل از نام
  • *const - نشانگر ثابت؛ قبل از نام
  • & - ارتباط دادن؛ قبل از نام
  • - آرایه؛ بعد از نام؛
  • () - تابع؛ بعد از نام

یک مقدار دهی اولیه به شما امکان می دهد تا مقدار متغیر را بلافاصله پس از اعلان تعریف کنید. مقداردهی اولیه با لفظ (=) برابر شروع می شود و سپس فرآیند تنظیم مقدار متغیر انجام می شود. به طور کلی، علامت مساوی در C++ یک عملیات انتساب را نشان می دهد. می توان از آن برای تنظیم و تغییر مقدار یک متغیر استفاده کرد. ممکن است برای انواع مختلف متفاوت باشد.

مشخص کننده ویژگی های اضافی غیر از نوع را مشخص می کند. مشخص کننده const داده شده در مثال به شما امکان می دهد تغییرات بعدی در مقدار متغیر را ممنوع کنید. این گونه متغیرهای تغییرناپذیر ثابت یا ثابت نامیده می شوند.

اعلان یک ثابت بدون مقداردهی اولیه به دلایل منطقی کار نخواهد کرد:

Const int EMPTY_CONST; // خطا، متغیر ثابت اولیه نشده const int EXAMPLE = 2; // ثابت با مقدار 2 EXAMPLE = 3; // خطا، تلاش برای اختصاص یک مقدار به یک متغیر ثابت

برای نامگذاری ثابت ها، مرسوم است که فقط از حروف بزرگ استفاده کنید و کلمات را با یک کاراکتر زیر خط جدا کنید.

انواع داده های پایه در C++

در تشریح هر نوع، خواننده باید به خاطر داشته باشد که نوع داده را تعریف کند.

1. نوع عدد صحیح (char، short (int)، int، long (int، long long)

از نام به راحتی می توان فهمید که مجموعه مقادیر از اعداد صحیح تشکیل شده است. همچنین مجموعه مقادیر هر یک از انواع فهرست شده می تواند دارای علامت (امضا) یا بدون علامت (بدون علامت) باشد. تعداد عناصر موجود در یک مجموعه به اندازه حافظه ای که برای ذخیره مقدار آن نوع استفاده می شود بستگی دارد. به عنوان مثال، برای متغیری از نوع char، 1 بایت حافظه اختصاص داده می شود، بنابراین کل عناصر به صورت زیر خواهد بود:

  • 2 8N = 2 8 * 1 = 256، که در آن N مقدار حافظه در بایت برای ذخیره مقدار است.

در چنین حالتی، محدوده اعداد صحیح موجود به شرح زیر است:

  • - برای کاراکتر بدون امضا
  • [-128..127] - برای کاراکتر امضا شده

به طور پیش فرض، یک متغیر از نوع عدد صحیح علامت دار در نظر گرفته می شود. برای اینکه در کد مشخص شود که یک متغیر باید بدون علامت باشد، یک علامت علامت‌دار به نوع پایه در سمت چپ اختصاص داده می‌شود، یعنی. بدون امضا:

مقادیر طولانی بدون علامت; // یک نوع بدون علامت عدد صحیح (طولانی) را تعریف می کند.

انواع ذکر شده فقط در میزان حافظه مورد نیاز برای ذخیره سازی متفاوت است. از آنجایی که زبان C++ یک استاندارد زبان نسبتاً مخصوص ماشین است، فقط شرایط زیر را تضمین می کند:

  • 1 = اندازه کاراکتر ≤ اندازه کوتاه ≤ اندازه int ≤ اندازه بلند.

معمولاً اندازه انواع به شرح زیر است: char - 1، short - 2، int - 4، long - 8، long long - 8 بایت.

می توانید عملیات حسابی را با مقادیر نوع صحیح انجام دهید: +, -, *, /, %; عملیات مقایسه: ==، !=،<=, <, >، >=; عملیات بیت: &، |، xor،<<, >>.
درک اکثر عملیات مانند جمع، ضرب، تفریق و مقایسه آسان است. گاهی اوقات، پس از انجام عملیات حسابی، ممکن است نتیجه خارج از محدوده مقادیر باشد. در این صورت برنامه خطا می دهد.
تقسیم عدد صحیح (/) قسمت صحیح تقسیم یک عدد صحیح بر دیگری را پیدا می کند. مثلا:

  • 6 / 4 = 1;
  • 2 / 5 = 0;
  • 8 / 2 = 4.

نماد درصد (%) عملیات تعیین باقیمانده تقسیم دو عدد صحیح را نشان می دهد:

  • 6 % 4 = 2;
  • 10 % 3 = 1.

درک عملیات به صورت بیتی دشوارتر است: & (AND)، | (OR)، xor (انحصاری OR)،<< (побитовый сдвиг влево), >> (تغییر بیتی به راست).

عملیات بیت AND، OR و XOR عملیات منطقی مربوطه را برای هر بیت از اطلاعات اعمال می کنند:

  • 1 10 = 01 2
  • 3 10 = 11 2
  • 1 10 & 3 10 = 01 2 & 11 2 = 01 2
  • 1 10 | 3 10 = 01 2 | 11 2 = 11 2
  • 1 10 xor 3 10 = 01 2 xor 11 2 = 10 2

در پردازش تصویر، از 3 کانال برای رنگ استفاده می شود: قرمز، آبی و سبز - به علاوه شفافیت، که در متغیری از نوع int ذخیره می شود، زیرا هر کانال دارای محدوده ای از مقادیر از 0 تا 255 است. در هگزادسیمال، یک مقدار به صورت زیر نوشته می شود: 0x180013FF; سپس مقدار 18 16 مربوط به کانال قرمز، 00 16 - آبی، 13 16 - سبز، FF - کانال آلفا (شفافیت) است. برای انتخاب یک کانال خاص از چنین عدد صحیحی، از به اصطلاح استفاده کنید. ماسک، که در آن موقعیت های مورد علاقه ما F 16 یا 1 2 هستند. یعنی برای برجسته کردن مقدار کانال آبی، باید از ماسک استفاده کنید. به صورت بیتی و:

int blue_channel = 0x180013FF & 0x00FF0000;

پس از آن، مقدار دریافتی با تعداد بیت مورد نیاز به سمت راست منتقل می شود.

یک شیفت بیتی هر تعداد بیت از یک عدد را که در سمت راست عملیات مشخص شده است به چپ یا راست تغییر می دهد. برای مثال عدد 39 برای نوع char به صورت باینری به صورت زیر نوشته می شود: 00100111. سپس:

Char binaryExample = 39; // 00100111 نتیجه کاراکتر = باینری مثال<< 2; // сдвигаем 2 бита влево, результат: 10011100

اگر متغیر از نوع بدون علامت باشد، نتیجه عدد 156 خواهد بود و برای متغیر علامت دار برابر با 100 است. توجه داشته باشید که برای انواع عدد صحیح علامت دار، واحد در مرتبه بالای نمایش بیت نشانه منفی بودن عدد است. در این مورد، یک مقدار به شکل باینری که از همه آنها تشکیل شده است با -1 مطابقت دارد. اگر 1 فقط در مهمترین رقم باشد و ارقام باقیمانده صفر باشند، چنین عددی حداقل مقدار را برای نوع خاصی از مقدار دارد: برای کاراکتر 128- است.

2. نوع نقطه شناور (شناور، دوگانه (شناور))

مجموعه مقادیر ممیز شناور زیرمجموعه ای از اعداد واقعی است، اما هر عدد واقعی را نمی توان به صورت باینری نشان داد، که گاهی اوقات منجر به اشتباهات احمقانه می شود:

مقدار شناور = 0.2; مقدار == ​​0.2; // خطا، مقدار در اینجا برابر با 0.2 نخواهد بود.

هنگام کار با متغیرهای ممیز شناور، برنامه نویس نباید از عملیات برابری یا نابرابری استفاده کند، در عوض معمولاً از یک تست برای زدن یک بازه معین استفاده می کند:

مقدار - 0.2< 1e-6; // ok, подбирать интервал тоже нужно осторожно

علاوه بر عملیات مقایسه، نوع ممیز شناور از 4 عملیات حسابی پشتیبانی می کند که کاملاً با عملیات ریاضی با اعداد واقعی مطابقت دارد.

3. نوع بولی (منطقی) (bool)

فقط از دو مقدار تشکیل شده است: true (true) و false (false). برای کار با متغیرهایی از این نوع، از عملیات منطقی استفاده می شود: ! (نه)، == (برابری)، != (نابرابری)، && (و منطقی)، || (OR منطقی). نتیجه هر عملیات را می توان در جدول حقیقت مربوطه یافت. مثلا:

X Y XOR0 0 0 0 1 1 1 0 1 1 1 0

4. نوع کاراکتر (char، wchar_t)

نوع کاراکتر نه تنها یک نوع عدد صحیح است (معمولاً به چنین نوع بایتی گفته می شود)، بلکه یک نوع کاراکتر است که شماره کاراکتر جدول را به عنوان یک کاراکتر ASCII ذخیره می کند. به عنوان مثال، کد 0x41 با کاراکتر "A" و 0x71 - "t" مطابقت دارد.

گاهی اوقات لازم است از کاراکترهایی استفاده کنید که در جدول ASCII ثابت نیستند و بنابراین برای ذخیره شدن به بیش از 1 بایت نیاز دارند. یک شخصیت گسترده (wchar_t) برای آنها وجود دارد.

5.1. آرایه ها

آرایه ها به شما امکان می دهند مجموعه ای متوالی از عناصر از یک نوع را ذخیره کنید. یک آرایه در یک بلوک پیوسته در حافظه ذخیره می شود، بنابراین نمی توانید یک آرایه را بدون تعیین اندازه آن اعلام کنید. برای اعلام یک آرایه، بعد از نام متغیر، براکت () را بنویسید که اندازه آن را نشان می دهد. مثلا:

int myArray; // آرایه ای از 5 عنصر از نوع عدد صحیح

برای مقداردهی اولیه یک آرایه، مقادیر در پرانتزهای فرفری فهرست می شوند. شما فقط می توانید در زمان اعلان متغیر از این طریق مقداردهی اولیه کنید. به هر حال، در این مورد لازم نیست اندازه آرایه را مشخص کنید:

شانس int = (1، 3، 7، 9، 11); // آرایه با 5 مقدار مقداردهی اولیه می شود

برای دسترسی به یک مقدار خاص در یک آرایه (عنصر آرایه)، از عملیات دسترسی به فهرست () با شماره عنصر (اعداد از 0 شروع می شوند) استفاده کنید. مثلا:

شانس // دسترسی به اولین عنصر آرایه. شانس 1 را برمی گرداند. // دسترسی به عنصر سوم. مقدار 7 شانس = 13 را برمی گرداند. // یک مقدار جدید به عنصر پنجم شانس آرایه اختصاص دهید. // خطای دسترسی

5.3. رشته های

برای نوشتن یک رشته، برنامه نویسان از این ایده استفاده می کنند که یک رشته یک سری (آرایه) متوالی از کاراکترها است. برای شناسایی انتهای یک خط، از یک کاراکتر انتهای خط ویژه استفاده می شود: '\0'. این کاراکترهای خاص که از یک بک اسلش و یک کاراکتر شناسایی تشکیل شده اند، کاراکترهای کنترل یا فرار نامیده می شوند. هنوز وجود دارد، برای مثال، '\n' - ابتدای یک خط جدید، '\t' - جدول بندی. برای ضبط یک بک اسلش در یک خط، از escaping استفاده می شود - یک اسلش دیگر قبل از خود علامت قرار می گیرد: '\'. از Escape برای نوشتن گیومه نیز استفاده می شود.

بیایید یک متغیر رشته ایجاد کنیم:

Char textExample = ('T', 'e', ​​'s', 't', '\0'); // رشته "Test" نوشته شده است

یک نماد ساده برای مقداردهی اولیه رشته وجود دارد:

Char textExample = "تست"; // آخرین کاراکتر نوشته نشده است، اما اندازه آن هنوز 5 است

بدون پرداختن به جزئیات، در اینجا یک نوع داده مفید دیگر وجود دارد - رشته. رشته های
از این نوع، برای مثال، می توانید اضافه کنید:

رشته سلام = "سلام، "; stringname = "Max!"; رشته hello_name = سلام + نام; // رشته "سلام، مکس!"

6. پیوند

Int a = 2; // متغیر "a" به مقدار 2 اشاره می کند int &b = a; // متغیر "b" به همان مکان "a" اشاره می کند b = 4; // با تغییر مقدار b، برنامه نویس مقدار a را تغییر می دهد. اکنون a = 4 int & c = 4; // خطا، شما نمی توانید این کار را انجام دهید، زیرا نمی توان به مرجع یک مقدار اختصاص داد

7. اشاره گر

برای مقابله با این نوع داده ها، لازم به یادآوری است که مجموعه مقادیر این نوع، آدرس سلول های حافظه است که داده ها از آنجا شروع می شوند. اشاره گر همچنین از عملیات جمع (+)، تفریق (-) و عدم ارجاع (*) پشتیبانی می کند.

آدرس‌های 0x0 به این معنی است که نشانگر خالی است، یعنی. به هیچ داده ای اشاره نمی کند. این آدرس به معنای واقعی کلمه خود را دارد - NULL:

Int *nullPtr = NULL; // نشانگر تهی

افزودن و تفریق یک آدرس با یک عدد صحیح یا آدرس دیگری اجازه می دهد
در حافظه موجود در برنامه حرکت کنید.

عملیات دریافت داده‌ها که از آدرس ذخیره شده در یک اشاره‌گر شروع می‌شود، عدم ارجاع (*) نامیده می‌شود. این برنامه تعداد مورد نیاز سلول های حافظه را می خواند و مقدار ذخیره شده در حافظه را برمی گرداند.

Int valueInMemory = 2; // یک متغیر از نوع عدد صحیح تنظیم کنید int *somePtr = // آدرس متغیر را کپی کنید، در اینجا & - آدرس متغیر somePtr را برمی گرداند. // آدرس سلول حافظه، به عنوان مثال، 0x2F *somePtr; مقدار // در 4 سلول ذخیره می شود: 0x2F، 0x30، 0x31 و 0x32

برای اشاره گرها، عملیات انتساب، که از نظر نحوی همان عملیات کپی است، در دسترس نیست. به عبارت دیگر، شما می توانید آدرس یک اشاره گر دیگر یا آدرس یک متغیر را کپی کنید، اما نمی توانید مقدار آدرس را خودتان تعیین کنید.

خود اشاره گر مانند مقادیر متغیرهای انواع دیگر در حافظه ذخیره می شود و 4 بایت طول می کشد، بنابراین می توانید یک اشاره گر به یک اشاره گر ایجاد کنید.

8. نقل و انتقالات

Enumerations تنها نوع پایه ای است که توسط برنامه نویس تعریف شده است. به طور کلی، شمارش مجموعه‌ای مرتب از ثابت‌های عدد صحیح نام‌گذاری‌شده است که نام شمارش نوع پایه آن است.

Enumcolor (قرمز، آبی، سبز)؛

به طور پیش فرض، قرمز = 0، آبی = 1، سبز = 2. بنابراین، مقادیر را می توان با یکدیگر مقایسه کرد، به عنوان مثال. قرمز< BLUE < GREEN. Программист при объявлении перечисления может самостоятельно задать значения каждой из констант:

دسترسی به فهرست (READ=1، WRITE=2، EXEC=4)؛

اغلب استفاده از شمارش هایی که مقادیر آنها توان دو است راحت است، زیرا در نمایش باینری، عددی که توان 2 است از واحد 1 و صفر تشکیل می شود. مثلا:

8 10 = 00001000 2

نتیجه جمع کردن این اعداد با هم همیشه به وضوح نشان می دهد که کدام اعداد اضافه شده اند:

37 10 = 00100101 2 = 00000001 2 + 00000100 2 + 00100000 2 = 1 10 + 4 10 + 32 10

خالی

از نظر نحوی، نوع void یکی از انواع اساسی است، اما تنها می تواند به عنوان بخشی از انواع پیچیده تر استفاده شود، زیرا اشیاء از نوع void وجود ندارند. به طور معمول، این نوع برای اطلاع از اینکه یک تابع مقدار بازگشتی ندارد یا به عنوان نوع پایه اشاره گر به اشیا با انواع تعریف نشده استفاده می شود:

شیء خالی؛ // خطا، هیچ شیئی از نوع void void // خطا وجود ندارد، هیچ ارجاعی به void void *ptr وجود ندارد. // خوب، یک اشاره گر را به یک نوع ناشناخته ذخیره کنید

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

قالب

اغلب لازم است که مقدار یک متغیر از یک نوع را به دیگری منتقل کنیم. در موردی که مجموعه مقادیر نوع اصلی زیرمجموعه ای از نوع بزرگتر باشد (مثلا int زیرمجموعه long و long دو برابر است)، کامپایلر می تواند به طور ضمنی ( به طور ضمنی) نوع مقدار را تغییر دهید.

int عدد صحیح = 2; floating floating = عدد صحیح; // شناور = 2.0

تبدیل نوع با از دست دادن اطلاعات انجام می شود، بنابراین فقط قسمت صحیح عدد ممیز شناور باقی می ماند، قسمت کسری از بین می رود.

امکان تبدیل نوع صریح (به صراحت) وجود دارد، برای این کار، در سمت چپ متغیر یا مقداری از نوع اصلی، در داخل پرانتز، نوع ریخته گری را بنویسید:

مقدار int = (int) 2.5;

عملیات واحد و باینری

به عملیاتی که قبلا انجام دادیم باینری می گویند: در سمت چپ و سمت راست نماد عملیات مقادیر یا متغیرهایی وجود دارد، به عنوان مثال، 2 + 3. علاوه بر عملیات باینری، زبان های برنامه نویسی از عملیات یونری نیز استفاده می کنند. که برای متغیرها اعمال می شود. آنها می توانند در سمت چپ یا راست یک متغیر باشند، چندین عملیات از این قبیل قبلاً با آن مواجه شده اند - عملیات ارجاع (*) و گرفتن آدرس یک متغیر (&) یکسان هستند. عملگرهای "++" و "-" مقدار یک متغیر عدد صحیح را به ترتیب 1 افزایش و کاهش می دهند و می توانند در سمت چپ یا راست متغیر نوشته شوند.

C++ همچنین از نماد مختصر برای عملیات باینری استفاده می کند، زمانی که سمت چپ و راست عبارت حاوی متغیر یکسانی باشد، یعنی. برخی از عملیات با مقدار متغیر انجام می شود و نتیجه عملیات در همان متغیر ذخیره می شود:

A += 2; // مشابه a = a + 2; b /= 5; // مانند b = b / 5; c &= 3; // مانند c = c & 3;

نوع عدد صحیح (int)

اندازه تایپ بین المللیتوسط استاندارد تعریف نشده است، اما به کامپیوتر و کامپایلر بستگی دارد.

برای یک پردازنده 16 بیتی، 2 بایت برای مقادیر از این نوع تخصیص داده می شود.

برای 32 بیت - 4 بایت.

مشخص کننده کوتاهدر مقابل نام نوع به کامپایلر نشان می دهد که 2 بایت برای عدد مورد نیاز است، صرف نظر از بیت پردازنده.

مشخص کننده طولانیبه این معنی که مقدار عدد صحیح 4 بایت خواهد بود.

بنابراین، در یک کامپیوتر 16 بیتی، معادل int و short int،

و در 32 بیت، int و long int.

نمایندگی داخلیمقادیر از نوع عدد صحیح - یک عدد صحیح در کد باینری. هنگام استفاده از مشخص کننده امضاء شدهمهم ترین بیت عدد به عنوان علامت (0 - عدد مثبت، 1 - منفی) تفسیر می شود. مشخص کننده بدون امضااجازه می دهد تا فقط اعداد مثبت نشان داده شوند، زیرا مهم ترین رقم بخشی از کد اعداد در نظر گرفته می شود. بنابراین، محدوده مقادیر نوع int به مشخص کننده ها بستگی دارد. محدوده‌های مقادیر مقادیر نوع عدد صحیح با مشخص‌کننده‌های مختلف برای رایانه‌های سازگار با IBM PC در جدول «محدوده‌های ارزش انواع داده‌های ساده» آورده شده است.

به‌طور پیش‌فرض، همه انواع اعداد صحیح علامت‌دار در نظر گرفته می‌شوند، به این معنی که مشخص‌کننده علامت‌دار را می‌توان حذف کرد.

ثابت هایی که در برنامه با آنها مواجه می شوند، مطابق با نوع آنها، یک نوع یا نوع دیگری را اختصاص می دهند. اگر به دلایلی مناسب برنامه نویس نیست، می توانید نوع مورد نیاز را با استفاده از پسوندهای L، l (طولانی) و U، u (بدون علامت) مشخص کنید. به عنوان مثال، ثابت 32L از نوع long و 4 بایت خواهد بود. می توانید از پسوندهای L و U به طور همزمان استفاده کنید، به عنوان مثال، 0x22UL یا 05Lu.

توجه داشته باشید.انواع short int، long int، signed int و unsigned int را می توان به ترتیب به short، long، signed و unsigned کوتاه کرد.

نوع کاراکتر (کاراکتر)

مقدار یک نوع کاراکتر، تعداد بایت‌هایی است که برای قرار دادن هر کاراکتری از مجموعه کاراکتر برای یک رایانه خاص کافی است، که منجر به نام نوع آن می‌شود. به طور معمول، این 1 بایت است. نوع کاراکتر مانند سایر انواع عدد صحیح می تواند دارای علامت یا بدون علامت باشد. مقادیر امضا شده می توانند مقادیری از -128 تا 127 را ذخیره کنند. هنگام استفاده از مشخص کننده بدون علامت، مقادیر می توانند از 0 تا 255 متغیر باشند. این برای ذخیره هر کاراکتری در مجموعه کاراکترهای ASCII 256 کاراکتری کافی است. از مقادیر char نیز برای ذخیره اعداد صحیح استفاده می شود.



نوع کاراکتر توسعه یافته (wchar_t)

تایپ کنید wchar_tطراحی شده برای کار با مجموعه ای از کاراکترها برای رمزگذاری که 1 بایت کافی نیست. به عنوان مثال یونیکد. اندازه این نوع به پیاده سازی بستگی دارد. معمولاً با نوع آن مطابقت دارد کوتاه.ثابت های رشته ای از نوع wchar_t با پیشوند L نوشته می شوند، به عنوان مثال، L"Gates".

نوع بولی (bool)

مقادیر بولی فقط می توانند مقادیر را بگیرند درست است، واقعیو نادرست، که کلمات رزرو شده هستند. نمایش داخلی false 0 (صفر) است. هر مقدار دیگری به عنوان درست تفسیر می شود. هنگام تبدیل به یک نوع عدد صحیح درست است، واقعیدارای مقدار 1 است.

انواع ممیز شناور (شناور، دوبل و بلند دوبل)

استاندارد C++ سه نوع داده را برای ذخیره مقادیر واقعی تعریف می کند: float، double و long double.

انواع داده های ممیز شناور متفاوت از انواع داده های عدد صحیح در حافظه ذخیره می شوند. نمایش داخلی یک عدد واقعی از دو بخش تشکیل شده است - مانتیسو سفارش.

در رایانه های سازگار با IBM PC، مقادیری مانند شناور 4 بایت را اشغال می کند که یک بیت آن اختصاص داده شده است زیر علامت مانتیس، 8 رقمی تحت دستورو 23 زیر مانتیس. مانتیس عددی بزرگتر از 1.0 اما کمتر از 2.0 است.از آنجایی که بالاترین رقم مانتیس همیشه 1 است، ذخیره نمی شود.

برای مقادیر نوع دو برابر،با اشغال 8 بایت، 11 و 52 بیت به ترتیب به ترتیب و مانتیسا اختصاص داده شده است. طول آخوندک دقت عدد را تعیین می کند، در حالی که طول نما محدوده آن را تعیین می کند.همانطور که در جدول انتهای ورودی مشاهده می کنید، با تعداد یکسانی از بایت های اختصاص داده شده برای مقادیر float و long int، محدوده مقادیر معتبر آنها بسیار متفاوت است. به دلیل فرم نمایندگی داخلی.

مشخص کننده طولانیقبل از نام نوع دو برابرنشان می دهد که 10 بایت به مقدار آن اختصاص داده شده است.

ثابت های ممیز شناور به طور پیش فرض از نوع double هستند. با استفاده از پسوندهای F, f (شناور) و L, l (طولانی) می توانید به صراحت نوع یک ثابت را مشخص کنید.

برای مثال، ثابت 2E+6L از نوع long double و ثابت 1.82f از نوع float خواهد بود.

هنگام نوشتن برنامه‌هایی که برای پلتفرم‌های مختلف جهانی هستند، نمی‌توانید در مورد اندازه نوع آن فرضیاتی داشته باشید بین المللیبرای دریافت آن باید از عملگر sizeof استفاده کنید که اندازه نوع را بر حسب بایت برمی گرداند.

به عنوان مثال، در یک سیستم عامل MS-DOS، sizeof(int) به 2 و در ویندوز 98 یا OS/2، نتیجه 4 خواهد بود.

استاندارد ANSI محدوده مقادیر را برای انواع اصلی مشخص نمی کند، فقط نسبت بین اندازه آنها تعریف شده است، به عنوان مثال:

sizeof(float) ≤ slzeof(دوبل) ≤ sizeof(طولان دوبل)
sizeof(char) ≤ slzeof(کوتاه) ≤ sizeof(int) ≤ sizeof(طولانی)

توجه داشته باشید.حداقل و حداکثر مقادیر مجاز برای انواع عدد صحیح وابسته به پیاده سازی است و در فایل هدر آورده شده است ()، ویژگی های انواع واقعی - در فایل () و همچنین در قالب کلاس numeric_limits

نوع خالی

علاوه بر موارد ذکر شده، نوع void یکی از انواع اصلی زبان است، اما مجموعه مقادیر این نوع خالی است. برای تعریف توابعی که مقداری را برنمی‌گردانند، برای تعیین یک لیست خالی از آرگومان‌های تابع، به‌عنوان نوع پایه برای اشاره‌گرها و در عملیات ریخته‌گری استفاده می‌شود.

انواع مختلفی از انواع اعداد صحیح و واقعی، که در محدوده و دقت نمایش داده‌ها متفاوت هستند، معرفی شده‌اند تا برنامه‌نویس را قادر می‌سازد تا از قابلیت‌های یک سخت‌افزار خاص به بهترین شکل استفاده کند، زیرا سرعت محاسبات و مقدار حافظه وجود دارد. به انتخاب نوع بستگی دارد اما یک برنامه بهینه‌سازی شده برای یک نوع کامپیوتر ممکن است برای پلتفرم‌های دیگر غیرقابل حمل شود، بنابراین به طور کلی، از وابستگی به ویژگی‌های خاص انواع داده‌ها باید اجتناب شود.

تایپ کنید محدوده ارزش اندازه (بایت)
بوول درست و نادرست
کاراکتر امضا شده -128 … 127
کاراکتر بدون امضا 0 … 255
امضا کوتاه بین المللی -32 768 … 32 767
بدون امضا کوتاه 0 … 65 535
امضای طولانی مدت -2 147 483 648 … 2 147 483 647
بدون امضا طولانی int 0 … 4 294 967 295
شناور 3.4e-38 … 3.4e+38
دو برابر 1.7e-308 … 1.7C+308
دوبل بلند 3.4e-4932 … 3.4e+4932

ساختار برنامه

یک برنامه C++ شامل کارکرد, توضیحاتو دستورالعمل های پیش پردازنده. یکی از توابع باید نامگذاری شود اصلی. اجرای برنامه با اولین عبارت این تابع آغاز می شود. ساده ترین تعریف تابع دارای فرمت زیر است:

به عنوان یک قاعده، یک تابع برای محاسبه مقداری استفاده می شود، بنابراین نوع آن قبل از نام تابع نشان داده می شود. در زیر مهمترین اطلاعات در مورد عملکردها آمده است:

  • اگر تابع نباید مقداری را برگرداند، نوع void مشخص می شود:
  • بدنه تابع یک بلوک است و بنابراین در بریس های فرفری محصور شده است.
  • توابع را نمی توان تودرتو کرد.
  • هر عبارت با یک نقطه ویرگول (به جز دستور مرکب) به پایان می رسد.

مثالی از ساختار برنامه حاوی توابع main، fl و f2:

این برنامه ممکن است از چندین مورد تشکیل شده باشد ماژول ها(فایل های منبع).

نکات مربوط به I/O در C++

زبان C++ هیچ امکانات ورودی/خروجی داخلی ندارد - با استفاده از توابع، انواع و اشیاء موجود در کتابخانه‌های استاندارد انجام می‌شود.

دو روش استفاده می شود: توابع به ارث رسیده از زبان C، و اشیاء C++.

توابع اولیه ورودی/خروجی به سبک C:

int scanf (فرمت const char*، ...) // ورودی
int printf(const char* format, ...) // خروجی

آنها ورودی و خروجی فرمت شده تعداد دلخواه مقادیر را با توجه به رشته قالب انجام می دهند. رشته قالب شامل کاراکترهایی است که در جریان (روی صفحه) کپی می شوند یا از جریان (از صفحه کلید) در ورودی درخواست می شوند، و مشخصات تبدیل، که با علامت % شروع می شود، که با مقادیر خاصی در ورودی و جایگزین می شوند. خروجی

یک برنامه نمونه با استفاده از توابع ورودی/خروجی به سبک C:

#عبارتند از
int main() (
int i;
printf("یک عدد صحیح را وارد کنید\n");
scanf("%d"، &i);
printf("شما عدد %d را وارد کردید، متشکرم!"، i);
بازگشت 0;
}

خط اول این برنامه یک دستورالعمل پیش پردازنده است که بر اساس آن یک فایل هدر در متن برنامه درج می شود که حاوی توضیحاتی از توابع ورودی / خروجی استفاده شده در برنامه است (در این مورد، براکت های زاویه ای عنصری از زبان هستند. ). همه دستورالعمل های پیش پردازنده با علامت # شروع می شوند.

خط سوم شرحی از یک متغیر نوع صحیح به نام i است.

تابع printf در خط چهارم اعلان "Enter a Integer" را چاپ می کند و طبق ترتیب \n escape به یک خط جدید می پرد. تابع scanf عدد صحیح وارد شده از صفحه کلید را در متغیر i ذخیره می کند (علامت & به معنای عملیات دریافت آدرس است) و عبارت زیر رشته مشخص شده در آن را نشان می دهد و مقدار این عدد را جایگزین مشخصات تبدیل می کند.

برنامه با استفاده از کتابخانه کلاس C++:

#عبارتند از
int main() (
int i;
کوت<< "Введите целое число\n"؛ cin >> i;
کوت<< "Вы ввели число " << i << ", спасибо!";
بازگشت 0;
}

فایل هدر حاوی توضیحات مجموعه ای از کلاس ها برای مدیریت ورودی/خروجی است. اشیاء جریان استاندارد را تعریف می کند cinبرای ورودی صفحه کلید و کوتبرای نمایش روی صفحه و همچنین عملیات پخش جریانی< < и чтения из потока >>.

می توانید از هر دو روش سازماندهی ورودی / خروجی استفاده کنید، اما ترکیب آنها در یک برنامه توصیه نمی شود.

آخرین به روز رسانی: 1396/11/13

مانند بسیاری از زبان های برنامه نویسی، سی شارپ سیستم نوع داده خاص خود را دارد که برای ایجاد متغیرها استفاده می شود. نوع داده نمایش داخلی داده ها، مجموعه مقادیری که یک شی می تواند انجام دهد و اقدامات مجاز که می تواند روی شی انجام شود را تعریف می کند.

زبان سی شارپ دارای انواع داده های اولیه زیر است:

    bool: مقدار true یا false را ذخیره می کند (الفظ بولی). توسط نوع سیستم System.Boolean نشان داده می شود

    bool alive = درست است. bool isDead = false;

    بایت: یک عدد صحیح از 0 تا 255 را ذخیره می کند و 1 بایت را اشغال می کند. توسط نوع سیستم System.Byte نشان داده می شود

    بیت بیت 1 = 1; بایت بیت 2 = 102;

    sbyte: یک عدد صحیح از -128 تا 127 را ذخیره می کند و 1 بایت را اشغال می کند. توسط نوع سیستم System.SByte نشان داده می شود

    Sbyte bit1 = -101; sbyte bit2 = 102;

    short : یک عدد صحیح از -32768 تا 32767 را ذخیره می کند و 2 بایت را اشغال می کند. توسط نوع سیستم System.Int16 نشان داده شده است

    کوتاه n1 = 1; کوتاه n2 = 102;

    ushort: یک عدد صحیح از 0 تا 65535 را ذخیره می کند و 2 بایت را اشغال می کند. توسط نوع سیستم System.UInt16 نشان داده شده است

    Ushort n1 = 1; شورت n2 = 102;

    int : یک عدد صحیح از -2147483648 تا 2147483647 را ذخیره می کند و 4 بایت می گیرد. توسط نوع سیستم System.Int32 نشان داده شده است. تمام لفظ های اعداد صحیح به طور پیش فرض مقادیری از نوع int را نشان می دهند:

    int a = 10; int b = 0b101; // فرم باینری b =5 int c = 0xFF; // فرم هگز c = 255

    uint : یک عدد صحیح از 0 تا 4294967295 را ذخیره می کند و 4 بایت می گیرد. توسط نوع سیستم System.UInt32 نشان داده می شود

    واحد a = 10; واحد b = 0b101; واحد c = 0xFF;

    long : یک عدد صحیح از -9 223 372 036 854 775 808 تا 9 223 372 036 854 775 807 را ذخیره می کند و 8 بایت را اشغال می کند. توسط نوع سیستم System.Int64 نشان داده شده است

    طولانی a = -10; طولانی b = 0b101; طولانی c = 0xFF;

    ulong : یک عدد صحیح از 0 تا 18446744073709551615 را ذخیره می کند و 8 بایت می گیرد. توسط نوع سیستم System.UInt64 نشان داده شده است

    طولانی a = 10; ulongb = 0b101; طولانی c = 0xFF;

    float: یک عدد ممیز شناور از -3.4*1038 تا 3.4*1038 را ذخیره می کند و 4 بایت می گیرد. توسط نوع سیستم System.Single نشان داده می شود

    double : یک عدد ممیز شناور از ±5.0*10 -324 تا ±1.7*10308 را ذخیره می کند و 8 بایت را اشغال می کند. نشان داده شده توسط نوع سیستم System.Double

    اعشاری : یک عدد کسری اعشاری را ذخیره می کند. اگر بدون نقطه اعشار استفاده شود، دارای مقدار ± 1.0 * 10 -28 تا 7.9228 ± 10 28 است، می تواند 28 رقم اعشار را ذخیره کند و 16 بایت را اشغال می کند. نشان داده شده توسط نوع سیستم System.Decimal

    char : یک کاراکتر یونیکد را ذخیره می کند و 2 بایت را اشغال می کند. با نوع سیستم System.Char نشان داده می شود. حروف نویسه با این نوع مطابقت دارد:

    Char a = "A"; char b = "\x5A"; char c = "\u0420";

    رشته: مجموعه کاراکترهای یونیکد را ذخیره می کند. توسط نوع سیستم System.String نشان داده می شود. حروف نویسه با این نوع مطابقت دارد.

    رشته سلام = "سلام"; string word = "جهان";

    شی : می تواند مقداری از هر نوع داده ای را ذخیره کند و در یک پلتفرم 32 بیتی 4 بایت و در یک پلت فرم 64 بیتی 8 بایت را اشغال می کند. با نوع سیستم System.Object نشان داده می شود، که نوع پایه برای همه انواع و کلاس های دات نت دیگر است.

    شیء a = 22; شی b = 3.14; شی c = "کد سلام";

به عنوان مثال، بیایید چندین متغیر از انواع مختلف تعریف کنیم و مقادیر آنها را در کنسول چاپ کنیم:

استفاده از سیستم؛ namespace HelloApp ( class Program ( static void Main(string args) ( string name = "Tom"; int age = 33; bool isEmployed = false; double weight = 78.65; Console.WriteLine($"Name: (name)"); Console.WriteLine($"Age: (سن)"); Console.WriteLine($"Weight: (وزن)"); Console.WriteLine($"Employed: (isEmployed)"); ) ) )

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

نام: تام سن: 33 وزن: 78.65 کار: نادرست

استفاده از پسوندها

هنگام تخصیص مقادیر، ظرافت زیر را در نظر داشته باشید: همه لفظ های واقعی به عنوان مقادیری از نوع double در نظر گرفته می شوند. و برای نشان دادن اینکه یک عدد کسری نشان دهنده یک نوع شناور یا یک نوع اعشاری است، باید یک پسوند به حرف اضافه کنید: F / f - برای شناور و M / m - برای اعشار.

به طور مشابه، تمام حرف های اعداد صحیح به عنوان مقادیری از نوع int در نظر گرفته می شوند. برای اینکه صریحاً نشان دهید که یک عدد صحیح یک مقدار از نوع uint را نشان می دهد، از پسوند U/u، L/l برای طولانی و UL/ul برای ulong استفاده کنید:

Uint a = 10U; طولانی b = 20L. ulong c = 30UL;

استفاده از انواع سیستم

در بالا، هنگام فهرست کردن تمام انواع داده های اساسی، یک نوع سیستم برای هر کدام ذکر شد. زیرا نام نوع داخلی در اصل مختصر نوع سیستم است. به عنوان مثال، متغیرهای زیر از نظر نوع معادل خواهند بود:

int a = 4; System.Int32 b = 4;

تایپ ضمنی

قبلاً به صراحت نوع متغیرها را مشخص کردیم، به عنوان مثال، int x; . و کامپایلر از قبل در راه اندازی می دانست که x یک مقدار صحیح را ذخیره می کند.

با این حال، می توانیم از مدل تایپ ضمنی نیز استفاده کنیم:

Var hello = "جهنم به جهان"; var c = 20; Console.WriteLine(c.GetType().ToString()); Console.WriteLine(hello.GetType().ToString());

برای تایپ ضمنی، به جای نام نوع داده از کلمه کلیدی var استفاده می شود. سپس در حین کامپایل، خود کامپایلر نوع داده را بر اساس مقدار اختصاص داده شده استنباط می کند. مثال بالا از عبارت Console.WriteLine(c.GetType().ToString()) استفاده کرد. ، که به ما امکان می دهد نوع استنباط شده متغیر c را بشناسیم. از آنجایی که به طور پیش فرض همه مقادیر صحیح به عنوان مقادیری از نوع int در نظر گرفته می شوند، به همین دلیل است که متغیر c در نهایت از نوع int یا System خواهد بود.Int32

این متغیرها مشابه متغیرهای معمولی هستند، اما محدودیت هایی دارند.

اول، ما نمی توانیم ابتدا یک متغیر تایپ شده ضمنی را اعلام کنیم و سپس آن را مقداردهی اولیه کنیم:

// این کد به صورت a; a = 20; // این کد کار نمی کند var c; c=20;

دوم، ما نمی توانیم null را به عنوان مقدار متغیری که به طور ضمنی تایپ شده است مشخص کنیم:

// این کد کار نمی کند var c=null;

از آنجایی که مقدار صفر است، کامپایلر نمی تواند نوع داده را استنتاج کند.

دو یا اعشاری

از لیست انواع داده های ذکر شده در بالا، مشخص است که اگر بخواهیم از اعداد تا 256 در برنامه استفاده کنیم، می توانیم از متغیرهایی از نوع بایت برای ذخیره آنها استفاده کنیم. هنگام استفاده از مقادیر بزرگ، می توانیم نوع short، int، long را در نظر بگیریم. برای اعداد کسری هم همینطور - برای اعداد کسری معمولی می توانید نوع شناور را بگیرید، برای اعداد کسری بسیار بزرگ - نوع دوتایی. نوع اعشاری در اینجا برجسته است به این معنا که با وجود بزرگتر بودن از نوع دوگانه، نوع دوگانه می تواند مقدار بزرگتری را ذخیره کند. با این حال، یک مقدار اعشاری می تواند حداکثر 28 رقم اعشار داشته باشد، در حالی که یک مقدار دوگانه می تواند شامل 15-16 رقم اعشار باشد.

اعشاری بیشتر در محاسبات مالی استفاده می شود، در حالی که دو در عملیات ریاضی استفاده می شود. تفاوت های کلی این دو نوع را می توان در جدول زیر خلاصه کرد.

به داده هابه هر گونه اطلاعات ارائه شده به شکلی اشاره دارد که به شما امکان می دهد جمع آوری، ذخیره و پردازش آن را در رایانه به طور خودکار انجام دهید (اعداد، نمادها، بیت ها و غیره).
داده های موجود در برنامه می تواند باشد اولیه(در ورودی برنامه مشخص شده است) یا نتایج پردازش(متوسط ​​یا آخر هفته).
همه داده ها - متغیرها و ثابت ها - به یک نوع خاص تعلق دارند.
هر نوع داده مربوط به خود است محدوده ارزش(تعداد بایت برای یک مقدار) و عملیات مجاز.

انواع داده ها در C/C++ به دو دسته تقسیم می شوند اصلیو مشتقات.
انواع اصلی عبارتند از:

  1. خالی(نوع خالی)
  2. بین المللی(نوع عدد صحیح)،
  3. شناور(اعداد ممیز شناور واقعی)،
  4. دو برابر(اعداد واقعی ممیز شناور با دقت دوگانه)،
  5. کاراکتر(نوع شخصیت)،
  6. بوول- منطقی

انواع کامپوزیت

برای تشکیل انواع دیگر داده ها، استفاده کنید اصلیانواع + به اصطلاح مشخص کننده ها. انواع داده های ایجاد شده از انواع استاندارد با استفاده از مشخص کننده ها نامیده می شوند انواع داده های ترکیبی. C++ چهار مشخص کننده نوع داده را تعریف می کند:
  1. کوتاه - کوتاه;
  2. طولانی - طولانی؛
  3. امضا شده-امضا;
  4. بدون امضا
انواع مشتق شده عبارتند از:
  • آرایه ها،
  • کارکرد،
  • کلاس ها،
  • اشاره گر،
  • پیوندها،
  • سازه های،
  • انجمن ها

نوع کاراکتر

داده ها را تایپ کنید کاراکتردر حافظه کامپیوتر همیشه 1 بایت اشغال می شود. این به دلیل این واقعیت است که معمولاً یک مقدار نوع کاراکتر به اندازه ای که برای ذخیره هر یک از 256 کاراکتر صفحه کلید لازم است به حافظه داده می شود.
نوع کاراکتر می تواند باشد امضاء شدهیا بدون امضا.
در مقادیر امضا شده کاراکتر امضا شدهشما می توانید مقادیر را در محدوده 128- تا 127 ذخیره کنید. بر این اساس، مقادیر متغیرهای نوع کاراکتر بدون امضامی تواند از 0 تا 255 متغیر باشد.
نوع داده محدوده ارزش اندازه
کاراکتر -128...+127 1 بایت
کاراکتر بدون امضا 0...255 1 بایت
کاراکتر امضا شده -128...127 1 بایت

هنگام کار با داده های کاراکتر، به یاد داشته باشید که اگر یک عبارت شامل تک شخصیت، باید در آن محصور شود نقل قول های تک. دنباله ای از کاراکترها، به عنوان مثال یک رشته، زمانی که در عبارات استفاده می شود در دو نقل قول. به عنوان مثال: "F"، "3"، "Ivan"، "235"

نوع عدد صحیح

داده ها را تایپ کنید بین المللیحافظه کامپیوتر می تواند 2، 4 یا 8 بایت را اشغال کند. این بستگی به بیتی پردازنده دارد.
به طور پیش فرض، همه انواع اعداد صحیح علامت دار در نظر گرفته می شوند، یعنی مشخص کننده امضاء شده(امضا) قابل حذف است.
مشخص کننده بدون امضا(بدون علامت) اجازه می دهد فقط اعداد مثبت نمایش داده شوند.

محدوده ارزش انواع عدد صحیح

نوع داده محدوده ارزش اندازه (بایت)
بین المللی
امضا شده
امضای طولانی مدت
-2147483648 ... 2147483647 4
بدون امضا
بدون امضا طولانی int
0 ... 4294967295 4
داخلی کوتاه
امضا کوتاه بین المللی
-32768 ... 32767 2
بدون امضا کوتاه 0... 65535 2
طولانی طولانی int \(-(2^{63}-1)...(2^{63}-1)\) 8
طولانی بدون امضا
طولانی مدت
\(0...(2^{64}-1)\) 8

نوع واقعی

نمایش داخلی یک عدد واقعی در حافظه کامپیوتر با نمایش یک عدد صحیح متفاوت است. یک عدد ممیز شناور نشان داده می شود به شکل نمایی. $$\pm mE\pm p$$ کجا متر- مانتیس (عدد کامل یا کسری با نقطه اعشار)، آر- سفارش (عدد صحیح). برای تبدیل یک عدد به صورت نمایی به نمایش نقطه ثابت معمولی، باید مانتیس را در ده در توان مرتبه ضرب کرد. برای مثال: \(-6.42E+2=-6.42*10^( 2)\)

محدوده ارزش انواع واقعی

نوع داده محدوده ارزش اندازه (بایت)
شناور 3.4E-38 ... 3.4E+38 4
دو برابر 1.7E-308... 1.7E+308 8
دوبل بلند 3.4E-4932 ... 3.4E+4932 10

طول آخوندک دقت عدد را تعیین می کند، در حالی که طول نما محدوده آن را تعیین می کند.
داده های نوع شناور 4 بایت را اشغال می کنند که 1 بیت برای علامت، 8 بیت برای توان و 23 بیت برای مانتیس اختصاص داده می شود. از آنجایی که بالاترین رقم مانتیس همیشه 1 است، ذخیره نمی شود.
داده‌های نوع دوگانه 8 بایت را اشغال می‌کنند، آنها به ترتیب دارای 11- بیت برای مرتبه و -52 بیت برای mantissa هستند.
مشخص کننده نوع طولانی قبل از نام نوع دوگانه نشان می دهد که 10 بایت برای مقدار تخصیص داده شده است.

نوع بولی

متغیر نوع بوولفقط دو مقدار می تواند بگیرد درست است، واقعی(درست) یا نادرست(دروغ). هر مقدار غیر صفر به عنوان درست تفسیر می شود و هنگامی که به یک نوع عدد صحیح تبدیل می شود، مقدار 1 را به خود می گیرد. False در حافظه به صورت 0 نشان داده می شود.

void (خالی) را تایپ کنید

مجموعه مقادیر این نوع خالی است.
نوع void برای موارد زیر استفاده می شود:
  • تعاریف توابعی که مقداری را بر نمی گرداند.
  • برای تعیین یک لیست خالی از آرگومان های تابع؛
  • به عنوان نوع پایه برای اشاره گرها.
  • در یک عملیات ریخته گری

اعلان متغیرها

متغیریک قطعه نامگذاری شده از حافظه است که مقداری از نوع خاصی را ذخیره می کند.
متغیر دارد نام(شناسه) و معنی.
نامبرای دسترسی به ناحیه ای از حافظه که مقدار در آن ذخیره می شود استفاده می شود.
نام(شناسه) ترکیبی از حروف، اعداد و زیرخط است که نام یک متغیر، نام یک تابع یا یک کلمه کلیدی را در یک برنامه مشخص می کند. زبان C/C++ به حروف بزرگ و کوچک حساس است (یعنی Sum و sum به عنوان دو متغیر متفاوت در نظر گرفته می شوند).
جایی که، نوع- یک کلمه کلیدی که مقدار حافظه (تعداد بایت) اختصاص داده شده برای ذخیره مقدار یک متغیر (به عنوان یک شی برنامه) را تعریف می کند (int – integer, float, double – real, char – character, bool – logical)؛
نام- یک شناسه متغیر منحصر به فرد که آدرس نمادین شی برنامه را در حافظه رایانه مشخص می کند.
آغازگر– مقدار اولیه متغیر که ممکن است در توضیحات نباشد.
به عنوان مثال: متغیرهای یک نوع را می توان با جدا کردن "،" گروه بندی کرد. توصیف متغیرهای انواع مختلف با "; ".
با توجه به محل اعلان، متغیرها در زبان C/C++ را می توان به سه کلاس تقسیم کرد:
  1. محلی - در داخل تابع اعلام شده و فقط در آن موجود است.
  2. جهانی - قبل از همه توابع توضیح داده شده و از هر جایی در برنامه در دسترس هستند.
  3. پارامترهای رسمی توابع در لیست پارامترهای تابع توضیح داده شده است.
مثال: