მონაცემთა ზომები გ. რა თვისებები აქვს მცურავი წერტილის მონაცემთა ტიპებს? მონაცემთა მთლიანი ტიპები

ამ გაკვეთილზე თქვენ შეისწავლით C++ ენის ანბანიდა ასევე რა მონაცემთა ტიპებიპროგრამას შეუძლია მისი დამუშავება. შეიძლება ეს არ იყოს ყველაზე ამაღელვებელი მომენტი, მაგრამ ეს ცოდნა აუცილებელია, გარდა ამისა, როცა სხვა პროგრამირების ენის შესწავლას დაიწყებთ, სწავლის მსგავს ეტაპს მეტი თავდაჯერებულობით გაივლით! C++ პროგრამა შეიძლება შეიცავდეს შემდეგ სიმბოლოებს:

  • დიდი, პატარა ლათინური ასოები A, B, C..., x, y, z და ქვედა ხაზი;
  • არაბული ციფრები 0-დან 9-მდე;
  • სპეციალური სიმბოლოები: ( ) , | , () + - / % * . \":?< > = ! & # ~ ; ^
  • სივრცე, ჩანართი და ახალი ხაზის სიმბოლოები.

პროგრამის ტესტირებისას შეგიძლიათ გამოიყენოთ კომენტარები. თუ ტექსტი შეიცავს ორ წინ დახრილი სიმბოლოს // და მთავრდება ახალი ხაზის სიმბოლოთი ან ჩასმულია /* და */ სიმბოლოებს შორის, მაშინ შემდგენელი უგულებელყოფს მას.

მონაცემები C++-ში

პრობლემის გადასაჭრელად, ნებისმიერი პროგრამა ამუშავებს გარკვეულ მონაცემებს. ისინი შეიძლება იყოს სხვადასხვა ტიპის: მთელი და რეალური რიცხვები, სიმბოლოები, სტრიქონები, მასივები. C++-ში მონაცემები ჩვეულებრივ აღწერილია ფუნქციის დასაწყისში. TO მონაცემთა ძირითადი ტიპებიენები მოიცავს:

სხვა სახის მონაცემების გენერირებას, საბაზისო და ე.წ სპეციფიკატორები. C++ განსაზღვრავს მონაცემთა ტიპის ოთხ მახასიათებელს:

  • მოკლე - მოკლე;
  • გრძელი - გრძელი;
  • ხელმოწერილი - ხელმოწერილი;
  • ხელმოუწერელი - ხელმოუწერელი.

მთელი ტიპი

ტიპი ცვლადი ინტკომპიუტერის მეხსიერებაში შეიძლება დაიკავოს 2 ან 4 ბაიტი. ეს დამოკიდებულია პროცესორის ბიტის ზომაზე. ნაგულისხმევად, ყველა მთელი ტიპი ითვლება ხელმოწერილად, ანუ სპეციფიკატორი ხელი მოაწერაშეიძლება არ იყოს მითითებული. სპეციფიკატორი ხელმოუწერელისაშუალებას გაძლევთ წარმოადგინოთ მხოლოდ დადებითი რიცხვები. ქვემოთ მოცემულია მთელი რიცხვის ტიპის მნიშვნელობების რამდენიმე დიაპაზონი

ტიპი დიაპაზონი ზომა
ინტ -2147483648…2147483647 4 ბაიტი
ხელმოუწერელი ინტ 0…4294967295 4 ბაიტი
ხელმოწერილი ქ -2147483648…2147483647 4 ბაიტი
მოკლე ინტ -32768…32767 2 ბაიტი
ხანგრძლივი ინტ -2147483648…2147483647 4 ბაიტი
ხელმოუწერელი მოკლე ინტ 0…65535 2 ბაიტი

ნამდვილი ტიპი

მცურავი წერტილის რიცხვი წარმოდგენილია mE +- p სახით, სადაც m არის მანტისა (მთლიანი ან წილადი რიცხვი ათობითი წერტილით), p არის მაჩვენებელი (მთლიანი). როგორც წესი, ფასეულობები, როგორიცაა ათწილადიიღებს 4 ბაიტს და ორმაგი 8 ბაიტი. რეალური მნიშვნელობების დიაპაზონის ცხრილი:

ათწილადი 3.4E-38…3.4E+38 4 ბაიტი
ორმაგი 1.7E-308…1.7E+308 8 ბაიტი
გრძელი ორმაგი 3.4E-4932…3.4E+4932 8 ბაიტი

ლოგიკური ტიპი

ტიპი ცვლადი ბულიშეიძლება მხოლოდ ორი მნიშვნელობის მიღება მართალია (მართალია ) ან ყალბი (ტყუილი ). ნებისმიერი მნიშვნელობა, რომელიც არ არის ნულის ტოლი, ინტერპრეტირებულია როგორც მართალია.მნიშვნელობა ყალბიმეხსიერებაში წარმოდგენილია როგორც 0.

აკრიფეთ void

ამ ტიპის მნიშვნელობების ნაკრები ცარიელია. იგი გამოიყენება ფუნქციების განსასაზღვრად, რომლებიც არ აბრუნებენ მნიშვნელობას, ფუნქციის არგუმენტების ცარიელი სიის დასაზუსტებლად, როგორც მაჩვენებლების საბაზისო ტიპისა და ტიპის casting ოპერაციებში.

მონაცემთა ტიპის კონვერტაცია

C++-ში არსებობს ორი ტიპის მონაცემთა ტიპის კონვერტაცია: აშკარა და იმპლიციტური.

  • იმპლიციტური კონვერტაციახდება ავტომატურად. ეს კეთდება სხვადასხვა ტიპის გამონათქვამების შედარების, დავალების ან შეფასების დროს. მაგალითად, შემდეგი პროგრამა კონსოლზე დაბეჭდავს მსგავს მნიშვნელობას ათწილადი

#include "stdafx.h" #include namespace std-ის გამოყენებით; int main() ( int i=5; float f=10.12; cout<>ბათილი"); დაბრუნება 0;)

#include "stdafx.h"

#შეიცავს

სახელთა სივრცის გამოყენებით std ;

int main()

int i = 5; ათწილადი f = 10.12;

კოუტ<< i / f ;

სისტემა ("პაუზა>>ბათილი");

დაბრუნება 0;

ყველაზე დიდი პრიორიტეტი ენიჭება იმ ტიპს, რომელშიც ყველაზე ნაკლები ინფორმაცია იკარგება. თქვენ არ უნდა გამოიყენოთ ზედმეტად იმპლიციტური ტიპის კონვერტაცია, რადგან შეიძლება წარმოიშვას სხვადასხვა გაუთვალისწინებელი სიტუაციები.

  • აშკარა კონვერტაციაიმპლიციტისგან განსხვავებით, მას პროგრამისტი ახორციელებს. ამ კონვერტაციის რამდენიმე გზა არსებობს:
  1. სტილზე გადაყვანა C: (ცურავი) ა
  2. სტილზე გადაყვანა C++: float ()

ტიპის ჩამოსხმა ასევე შეიძლება შესრულდეს შემდეგი ოპერაციების გამოყენებით:

static_cast<>() const_cast<>() reinterpret_cast<>() dynamic_cast<> ()

static_cast<> ()

const_cast<> ()

reinterpret_cast<> ()

dynamic_cast<> ()

static_cas- აკონვერტებს დაკავშირებულ მონაცემთა ტიპებს. ეს ოპერატორი აყენებს ტიპებს ჩვეულებრივი წესების მიხედვით, რაც შეიძლება საჭირო გახდეს, როდესაც შემდგენელი არ ასრულებს ავტომატურ კონვერტაციას. სინტაქსი ასე გამოიყურება:

აკრიფეთ static_cast<Тип>(ობიექტი);

static_cast-ის გამოყენებით, თქვენ ვერ ამოიღებთ მუდმივობას ცვლადიდან, მაგრამ შემდეგ ოპერატორს შეუძლია ამის გაკეთება. const_cast- გამოიყენება მხოლოდ მაშინ, როდესაც აუცილებელია ობიექტიდან მდგრადობის ამოღება. სინტაქსი ასე გამოიყურება:

ტიპიconst_cast< ტიპი> (ობიექტი);

reinterpret_cast- გამოიყენება სხვადასხვა ტიპის, მთელი რიცხვის პოინტერად გადაქცევისთვის და პირიქით. თუ ხედავთ ახალ სიტყვას "ინდექსი" - არ ინერვიულოთ! ეს ასევე არის მონაცემთა ტიპი, მაგრამ ჩვენ არ ვიმუშავებთ მასთან უახლოეს მომავალში. აქ სინტაქსი იგივეა, რაც ადრე განხილული ოპერატორების:

ტიპიხელახლა ინტერპრეტაცია_ მსახიობი< ტიპი> (ობიექტი);

dynamic_cast- გამოიყენება დინამიური ტიპის კონვერტაციისთვის, ახორციელებს მაჩვენებელს ან საცნობარო ჩამოსხმას. სინტაქსი:

ტიპიდინამიური _ მსახიობი< ტიპი> (ობიექტი);

მართეთ პერსონაჟები

თქვენ უკვე იცნობთ ზოგიერთ ამ „საკონტროლო სიმბოლოს“ (მაგალითად, \n). ისინი ყველა იწყება უკანა ხაზით და ასევე გარშემორტყმულია ორმაგი ციტატებით.

გამოსახულება

Hex კოდი

სახელი

სიგნალის ხმა

ერთი ნაბიჯით უკან დაბრუნდი

გვერდის თარგმანი (ფორმატი)

ხაზის კვება

ვაგონის დაბრუნება

ჰორიზონტალური ცხრილი

ვერტიკალური ჩანართი

მონაცემთა ტიპი განსაზღვრავს მნიშვნელობების ერთობლიობას, ოპერაციების ერთობლიობას, რომელიც შეიძლება გამოყენებულ იქნას ამ მნიშვნელობებზე და როგორ ინახება მნიშვნელობები და შესრულებულია ოპერაციები.

გამოყენებული მონაცემების ტიპებზე შემოწმებისა და შეზღუდვების დაწესების პროცესს ეწოდება ტიპის შემოწმება ან პროგრამის მონაცემების აკრეფა. განასხვავებენ აკრეფის შემდეგ ტიპებს:

  • სტატიკური აკრეფა - შედგენის დროს ხდება ტიპის კონტროლი.
  • დინამიური აკრეფა - ტიპის შემოწმება ხდება გაშვების დროს.

C ენა მხარს უჭერს სტატიკურ აკრეფას და პროგრამაში გამოყენებული ყველა მონაცემის ტიპები უნდა იყოს მითითებული მის კომპილაციამდე.

არსებობს მარტივი, რთული და სხვა ტიპის მონაცემთა ტიპები.

მარტივი მონაცემები

მარტივი მონაცემები შეიძლება დაიყოს

  • მთელი რიცხვები,
  • რეალური,
  • სიმბოლური
  • ლოგიკური.

კომპოზიტური (კომპლექსური) მონაცემები

  • მასივი არის იმავე ტიპის ელემენტების ინდექსირებული კოლექცია.
  • სტრიქონის ტიპი არის მასივი, რომელიც ინახავს სიმბოლოების სტრიქონს.
  • სტრუქტურა არის სხვადასხვა ელემენტების ერთობლიობა (ჩანაწერის ველები), რომლებიც ინახება როგორც ერთი მთლიანობა და უზრუნველყოფს წვდომას სტრუქტურის ცალკეულ ველებზე.

მონაცემთა სხვა ტიპები

  • Pointer - ინახავს მისამართს კომპიუტერის მეხსიერებაში, რომელიც მიუთითებს გარკვეულ ინფორმაციას, ჩვეულებრივ ცვლადის მაჩვენებელს.

C ენაზე დაწერილი პროგრამა მუშაობს სხვადასხვა ტიპის მონაცემებით. ყველა მონაცემს აქვს სახელი და ტიპი. პროგრამაში მონაცემების წვდომა ხდება მათი სახელებით (იდენტიფიკატორები).

იდენტიფიკატორი არის თანმიმდევრობა, რომელიც შეიცავს არაუმეტეს 32 სიმბოლოს, რომელიც შეიძლება შეიცავდეს ლათინური ანბანის ნებისმიერ ასოს a - z, A - Z, ნომრებს 0 - 9 და ქვედა ხაზს (_). იდენტიფიკატორის პირველი სიმბოლო არ უნდა იყოს რიცხვი.

მიუხედავად იმისა, რომ დაშვებულია 32-მდე სიმბოლოს სახელი, მნიშვნელოვანია მხოლოდ პირველი 8 სიმბოლო. სახელის გარდა, ყველა მონაცემს აქვს ტიპი. ტიპის დაზუსტება აუცილებელია ისე, რომ ცნობილი იყოს რამდენ ადგილს დაიკავებს მოცემული ობიექტი RAM-ში.

C შემდგენელი იცავს დიდი და პატარა ასოების მკაცრ შესაბამისობას იდენტიფიკატორებისა და ნიშნების სახელებში.

მთელი მონაცემები

მთელი მონაცემები შეიძლება წარმოდგენილი იყოს ხელმოწერილი ან ხელმოუწერელი სახით.

ხელმოუწერელი მთელი რიცხვებიწარმოდგენილია ბიტების თანმიმდევრობით 0-დან 2 n-1-მდე დიაპაზონში, სადაც n არის დაკავებული ბიტების რაოდენობა.

ხელმოწერილი მთელი რიცხვებიწარმოდგენილია -2 n-1 …+2 n-1 -1 დიაპაზონში. ამ შემთხვევაში, მონაცემთა ყველაზე მნიშვნელოვანი ბიტი ენიჭება რიცხვის ნიშანს (0 შეესაბამება დადებით რიცხვს, 1 - უარყოფითს).

მთელი რიცხვის მონაცემების ძირითადი ტიპები და ზომები:

რეალური მონაცემები

ნამდვილი ტიპიგანკუთვნილია რეალური რიცხვების წარმოსაჩენად. რეალური რიცხვები წარმოდგენილია აპარატის ბიტთა ქსელში სტანდარტიზებული ფორმით.

რიცხვის ნორმალიზებული ფორმაითვალისწინებს ერთი მნიშვნელოვანი ციფრის არსებობას (არა 0) მთელი და წილადი ნაწილების გამოყოფამდე. ეს წარმოდგენა მრავლდება რიცხვითი სისტემის ფუძით სათანადო ხარისხით. მაგალითად, ნომერი 12345.678 ნორმალიზებული ფორმით შეიძლება წარმოდგენილი იყოს როგორც

12345.678 = 1.2345678 10 4

ნომერი 0.009876 ნორმალიზებული ფორმით შეიძლება წარმოდგენილი იყოს როგორც

0.009876 = 9.876·10 -3

ორობითი რიცხვების სისტემაში ათწილადის გამყოფის წინ მნიშვნელოვანი ციფრი შეიძლება იყოს მხოლოდ 1-ის ტოლი. თუ რიცხვი არ არის წარმოდგენილი სტანდარტიზებული სახით (მაგალითად, რიცხვი 0), ათწილადის გამყოფის წინ მნიშვნელოვანი ციფრი არის 0.

რიცხვის მნიშვნელოვან ციფრებს, რომლებიც ნორმალიზებული სახით დგანან მთელი და წილადი ნაწილების გამყოფის შემდეგ, რიცხვის მანტისა ეწოდება.

ზოგად შემთხვევაში, რეალური რიცხვი კომპიუტერის ბიტთა ქსელში შეიძლება წარმოდგენილი იყოს 4 ველად.

  • ნიშანი— ბიტი, რომელიც განსაზღვრავს რეალური რიცხვის ნიშანს (0 დადებითი რიცხვებისთვის, 1 უარყოფითი რიცხვებისთვის).
  • ხარისხი— განსაზღვრავს 2-ის ხარისხს, რომლითაც გსურთ რიცხვის გამრავლება ნორმალიზებულ ფორმაში. ვინაიდან 2-ის სიმძლავრე რიცხვისთვის ნორმალიზებულ ფორმაში შეიძლება იყოს დადებითი ან უარყოფითი, 2-ის ნულოვანი ძალა რეალური რიცხვის წარმოდგენისას შეესაბამება ცვლის მნიშვნელობას, რომელიც განისაზღვრება როგორც

    სადაც n არის რიცხვების სიმძლავრის გამოსათვლელად გამოყოფილი ციფრების რაოდენობა.

  • მთლიანი- ბიტი, რომელიც ყოველთვის 1-ის ტოლია ნორმალიზებული რიცხვებისთვის, ამიტომ ზოგიერთი ტიპის წარმოდგენაში ეს ბიტი გამოტოვებულია და 1-ის ტოლია.
  • მანტისა— რიცხვის წარმოდგენის მნიშვნელოვანი ციფრები, რომლებიც დგას სტანდარტიზებული ფორმით მთელი რიცხვისა და წილადი ნაწილების გამყოფის შემდეგ.

C ენაზე რეალური რიცხვების წარმოდგენის სამი ძირითადი ტიპი არსებობს:

როგორც ცხრილიდან ჩანს, მთელი ბიტი აკლია float და double ტიპებს. ამ შემთხვევაში, რეალური რიცხვის წარმოდგენის დიაპაზონი შედგება ორი დიაპაზონისაგან, რომლებიც მდებარეობს სიმეტრიულად ნულის მიმართ. მაგალითად, float რიცხვების წარმოდგენის დიაპაზონი შეიძლება წარმოდგენილი იყოს როგორც:

მაგალითი: წარმოადგინეთ რიცხვი -178.125 32-ბიტიან ქსელში (float ტიპის).

ორობითი რიცხვების სისტემაში რიცხვის წარმოსადგენად, ჩვენ ცალ-ცალკე გარდაქმნით მთელ და წილად ნაწილებს:

178 10 = 10110010 2 .

0,125 10 = 0,001 2 .

178.125 10 = 10110010.001 2 =1.0110010001 2 111

ნორმალიზებულ ფორმაში გადასაყვანად გადაიტანეთ 7 ბიტი მარცხნივ).

რიცხვის სიმძლავრის დასადგენად გამოიყენეთ ცვლა:

0111111+00000111 = 10000110 .

ამრიგად, რიცხვი -178.125 წარმოდგენილი იქნება ბიტთა ბადეში, როგორც

პერსონაჟის ტიპი

სიმბოლოს ტიპი ინახავს სიმბოლოს კოდს და გამოიყენება სიმბოლოების საჩვენებლად სხვადასხვა კოდირებაში. სიმბოლოების მონაცემები მითითებულია კოდებში და არსებითად არის მთელი რიცხვი. სიმბოლოების კოდების შესანახად C ენაზე გამოიყენება char ტიპი.

ლოგიკური ტიპი

ლოგიკური ტიპი გამოიყენება ლოგიკურ ოპერაციებში, გამოიყენება ალგორითმული მდგომარეობის ტესტებში და მარყუჟებში და აქვს ორი მნიშვნელობა:

  • მართალია - მართალია
  • ყალბი — — ყალბი

პროგრამამ უნდა გამოაცხადოს გამოყენებული ყველა მონაცემი მისი სახელისა და ტიპის მითითებით. პროგრამაში მის გამოყენებას წინ უნდა უსწრებდეს მონაცემების აღწერა.

ობიექტის დეკლარაციის მაგალითი

int n; // ცვლადი n მთელი ტიპის
ორმაგი ა; // ცვლადი a ორმაგი სიზუსტის რეალური ტიპის

პასუხი:
  1. მონაცემთა მთლიანი ტიპები:

მოკლე int, unsigned მოკლე int, int, unsigned int, გრძელი, ხელმოუწერელი გრძელი.

  1. მცურავი წერტილის მონაცემთა ტიპები (რეალური ტიპების შესაბამისი):

float, ორმაგი, ხანგრძლივი ორმაგი.

  1. სიმბოლოს მონაცემთა ტიპი:

char (ხელმოწერილი char), ხელმოუწერელი char, wchar_t.

  1. ლოგიკური მონაცემთა ტიპი:

ბული.

  1. ჩამოთვლილი მონაცემთა ტიპი (დანერგილია Visual C++-ში):

აღრიცხვა.

2. რა თავისებურებები აქვს მონაცემთა მთელი რიცხვის ტიპების გამოყენებას?

C++-ში მთელი რიცხვის მონაცემთა ძირითადი ტიპებია: short int, unsigned short int, int, unsigned int, long (long int), unsigned long (unsigned long int).

მონაცემთა ეს ტიპები წარმოადგენს მნიშვნელობებს მთელი რიცხვებიდან. მაგალითად:

2 -100 398

მონაცემთა ტიპები, რომლებიც იწყება ხელმოუწერელი პრეფიქსით, შეიძლება შეიცავდეს მხოლოდ დადებით რიცხვებს.

მოკლე int, unsigned short int ტიპის მონაცემები იკავებს მეხსიერების ნახევარს, ვიდრე int, unsigned int ტიპის მონაცემები.

მონაცემები long, unsigned long იკავებს ორჯერ მეტ მეხსიერებას ვიდრე int, unsigned int ტიპის მონაცემები.

3. როგორ აღვწეროთ პროგრამაში მთელი რიცხვის ტიპის x დასახელებული ცვლადი?

პასუხი:
int x; // ხელმოწერილი მთელი რიცხვი

შედეგად, ცვლადის ქვეშ xგამოყოფილი იქნება მეხსიერების სივრცე 4 ბაიტი. ცვლადისთვის გამოყოფილი მეხსიერების ზომა დამოკიდებულია კომპიუტერის მახასიათებლებზე, ოპერაციული სისტემის ტიპზე და შემდგენელის პარამეტრებზე.

4. როგორ ჩავწეროთ რიცხვი 239 მთელი ტიპის ცვლადში?

ამისათვის გამოიყენეთ მინიჭების ოპერატორი, რომელიც აღინიშნება სიმბოლოთი "=".

პასუხი 1.რიცხვის შეყვანა ცვლადში მისი აღწერის შემდეგ.

int x; x = 239;

პასუხი 2.რიცხვის შეყვანა ცვლადში მისი აღწერისას (საწყისი ინიციალიზაცია).

int x = 239;

5. რა თვისებები აქვს მცურავი წერტილის მონაცემთა ტიპებს?

მცურავი წერტილის მონაცემთა ტიპები საშუალებას გაძლევთ წარმოადგინოთ მნიშვნელობები რეალური რიცხვების ნაკრებიდან. მაგალითად:

8.35 -990.399 239.0.

C++-ს აქვს შემდეგი ძირითადი მცურავი წერტილის მონაცემთა ტიპები:

float, ორმაგი, ხანგრძლივი ორმაგი.

Double ტიპის ცვლადი იკავებს 2-ჯერ მეტ ადგილს კომპიუტერის მეხსიერებაში, ვიდრე ცვლადი ტიპის float.

ასევე, გრძელი ორმაგი ტიპის ცვლადი იკავებს 2-ჯერ მეტ ადგილს კომპიუტერის მეხსიერებაში, ვიდრე ორმაგი ტიპის ცვლადი.

6. როგორ აღვწეროთ ცვლადი, რომელიც იღებს მცურავი წერტილის მნიშვნელობას?

float, ორმაგი, გრძელი ორმაგი ტიპების ცვლადების აღწერის მაგალითი:

float f; ორმაგი დ; გრძელი ორმაგი ld;

7. როგორ ჩავწეროთ რიცხვითი მნიშვნელობები მცურავი წერტილის ცვლადზე?

მცურავი წერტილის ცვლადებში რიცხვითი მონაცემების შეყვანის მაგალითი:

ათწილადი f = -9928,45; // საწყისი ინიციალიზაცია ორმაგი დ; გრძელი ორმაგი ld; d = 0.445332; // დავალების ოპერატორი ld = 3892923898239.030903; // დავალების ოპერატორი

8. როგორ გადავიყვანოთ float ცვლადი int ტიპად?

ამისათვის გამოიყენება ტიპის ჩამოსხმის ოპერაცია. ფრჩხილებში თქვენ უნდა მიუთითოთ იმ ტიპის დასახელება, რომელზედაც ხდება მსახიობი.

ათწილადი ა; int b; a = 8.457; b = (int ) a; // b = 8

ტიპის ჩამოსხმის ოპერაციების გამოყენებისას უნდა გაითვალისწინოთ ის შეზღუდვები, რომლებიც დაწესებულია იმ ტიპებზე, რომლებიც ნაკლებ ადგილს იკავებს კომპიუტერის მეხსიერებაში.

მაგალითად, short int ტიპის ცვლადი შეიძლება წარმოადგენდეს რიცხვების უფრო მცირე დიაპაზონს, ვიდრე ცვლადები float ან double. შემდეგი ჩამონათვალი აჭარბებს მნიშვნელობას short int ტიპის ცვლადში:

მოკლე int i; float f; f = 3990099.8; i = (int )f; // i = -7597 - გადინება

9. როგორ გადავიყვანოთ ცვლადი ტიპის int ტიპზე double?

კასტინგის მაგალითი ინტიდან ორამდე:

int i; ორმაგი დ; i = 982; d = (ორმაგი) i; // d = 982.0

10. რა თვისებები აქვს პროგრამაში char მონაცემების (სიმბოლო მონაცემების) გამოყენებას?

char ტიპის მონაცემები წარმოადგენს კლავიატურიდან შეყვანილი კოდის სიმბოლოს მნიშვნელობას. სიმბოლო კოდი არის მთელი რიცხვი.

მაგალითად, სიმბოლოს "f" კოდი არის 102.

კოდის ფრაგმენტი, რომელიც ითვლის სიმბოლოს კოდს:

int კოდი; char სიმბოლო; სიმბოლო = "f" ; კოდი = (int )სიმბოლო; // კოდი = 102

char ტიპის მონაცემები იგივე მთელი რიცხვებია. char ტიპის მონაცემები იკავებს 1 ბაიტს კომპიუტერის მეხსიერებაში.

სიმბოლო-კოდთან ურთიერთობა მდებარეობს Windows-ის სიმბოლოების ცხრილში. 0-დან 127-მდე კოდების მქონე სიმბოლოები დაცულია BIOS-ის სიმბოლოებით. მათ შორისაა ყველაზე ხშირად გამოყენებული სიმბოლოები, რიცხვითი სიმბოლოები და ლათინური სიმბოლოები. ამ სიმბოლოების შეცვლა შეუძლებელია.

128-დან 255-მდე კოდების მქონე სიმბოლოები არის რეგიონალური სიმბოლოები, რომლებიც დაკავშირებულია კომპიუტერის კონკრეტულ ანბანთან, რომელზეც დაინსტალირებულია Windows ოპერაციული სისტემა.

11. რა თვისებები აქვს მონაცემთა ტიპის bool (ლოგიკური ტიპის) გამოყენებას?

bool ტიპის ცვლადებს შეუძლიათ მხოლოდ ორი მნიშვნელობის მიღება:

სიმართლე - სიმართლე,

ყალბი - ყალბი.

ეს ცვლადები გამოიყენება ლოგიკური გამონათქვამების შესამოწმებლად. ჭეშმარიტების რიცხვითი მნიშვნელობა არის 1. false-ის რიცხვითი მნიშვნელობა არის 0.

კოდის ფრაგმენტი, რომელიც განსაზღვრავს ციფრულ მნიშვნელობებს true და false:

int შედეგი; bool b; შედეგი = (in)true; // შედეგი = 1 ბ = ყალბი ; შედეგი = (int )b; // შედეგი = 0

კოდის ფრაგმენტი, რომელიც გარდაქმნის int და float ტიპებს bool-ად:

int i; float f; bool b; i = 6; b = (bool )i; // b = მართალია f = 0.0; b = (bool )f; // b = მცდარი

12. როგორ განვსაზღვროთ მოცემული ტიპის ცვლადის მიერ დაკავებული მეხსიერების ზომა?

ამისათვის გამოიყენება ზომაof() ოპერაცია.

კოდის ნაწყვეტი, რომელიც განსაზღვრავს მონაცემთა ზოგიერთი ტიპის ზომას:

int d; d = sizeof(char); // d = 1 d = sizeof(ხელმოუწერელი int); // d = 4 d = sizeof(float); // d = 4 d = ზომა (ორმაგი); // დ = 8

13. როგორ ხდება სხვადასხვა ტიპის ცვლადების ინიციალიზაცია?

int d = 28; float z = (float )2,85; char c = "k" ; String ^s = "გამარჯობა!" ; ორმაგი r = -8,559;

14. როგორ განვსაზღვროთ გარკვეული ტიპის ცვლადის მაქსიმალური დასაშვები (მინიმალური დასაშვები) მნიშვნელობა?

გარკვეული ტიპის ცვლადის მაქსიმალური ან მინიმალური მნიშვნელობის დასადგენად, .NET Framework ბიბლიოთეკა იყენებს MaxValue და MinValue თვისებებს.

სხვადასხვა ტიპის ცვლადების ზღვრული მნიშვნელობების განსაზღვრის მაგალითები.

int ტიპის ცვლადებისთვის:

// აკრიფეთ int int i; გრძელი MaxInt; გრძელი MinInt; MaxInt = (გრძელი )i.MaxValue; // MaxInt = 2147483647 MinInt = (გრძელი )i.MinValue; // MinInt = -2147483648

მოკლე int ტიპის ცვლადებისთვის:

// აკრიფეთ short int მოკლე int si; int MaxInt; int MinInt; MaxInt = (int )si.MaxValue; // MaxInt = 32767 MinInt = (int )si.MinValue; // MinInt = -32768

unsigned int ტიპის ცვლადებისთვის:

// აკრიფეთ unsigned int ხელმოუწერელი int ui; ხელმოუწერელი int MaxInt; ხელმოუწერელი int MinInt; MaxInt = ui.MaxValue; // MaxInt = 4294967295 MinInt = ui.MinValue; // MinInt = 0

float ცვლადებისთვის:

// float ტიპის float f; float MaxF; ათწილადი MinF; MaxF = f.MaxValue; // MaxF = 3.402823E+38 MinF = f.MinValue; // MinF = -3.402823E+38

Double ტიპის ცვლადებისთვის:

// ჩაწერეთ ორმაგი ორმაგი დ; ორმაგი MaxD; ორმაგი გონება; Max = d.MaxValue; // მაქს = 1.79769313486232E+308 Min = d.MinValue; // მინ = -1,79769313486232E+308

char ტიპის ცვლადებისთვის:

// აკრიფეთ char char c; int MaxC; int MinC; Max = (int )c.MaxValue; // მაქს = 127 Min = (int )c.MinValue; // მინ = -128

15. რა თავისებურებები ახასიათებს enum ტიპის გამოყენებას?

Enum ტიპი არის აღრიცხვის მონაცემთა ტიპი. იგი განსაზღვრავს მნემონიკურ მნიშვნელობებს მთელი რიცხვების სიმრავლეებისთვის. თითოეულ მნემონიკურ მნიშვნელობას აქვს სპეციფიკური შინაარსი და წარმოდგენილია მთელი რიცხვით.

წლის თვეების წარმოსადგენად enum ტიპის გამოყენების მაგალითი:

მთელი თვე (იანვარი, თებერვალი, მარტი, აპრილი, მაისი, ივნისი, ივლისი, აგვისტო, სექტემბერი, ოქტომბერი, ნოემბერი, დეკემბერი) მნ; mn = იანვარი; // მნ = 0 მნ = მარტი; // მნ = 2 mn = სექტემბერი; // მნ = 8

ქვემოთ მოყვანილი მაგალითი აღწერს ცვლადს, სახელად mn, ტიპის enum months. მნემონური მნიშვნელობები თვეებისთვის (იანვარი, თებერვალი, ...) იწყება 0-დან (0, 1, 2, ...). იანვრის მნემონიკა არის მთელი რიცხვი 0, თებერვლის მნემონიკა არის მთელი რიცხვი 1 და ა.შ.

ასე რომ, enum ტიპის გამოყენებით, მნემონიკა შეიძლება გამოყენებულ იქნას პროგრამის ტექსტში, წყაროს კოდის უკეთესი სიცხადისთვის.

თქვენ ასევე შეგიძლიათ დაწეროთ ასე:

mn = (თვეების რაოდენობა)2; // წთ = მარტი mn = (თვეების რაოდენობა)11; // მნ = დეკემბერი

16. რა თვისებები აქვს ტიპსბათილად პროგრამებშიC++ ?

ბათილი მონაცემთა ტიპი გამოიყენება შემდეგ შემთხვევებში:

  • თუ გჭირდებათ ფუნქციის აღწერა, რომელიც არ აბრუნებს მნიშვნელობას (იხ. მაგალითი);
  • თუ გჭირდებათ ფუნქციის აღწერა, რომელიც არ იღებს პარამეტრებს (იხ. მაგალითი).

მაგალითი. MyFun() არის პარამეტრის გარეშე ფუნქცია, რომელიც არ აბრუნებს მნიშვნელობას (აბრუნებს ტიპის void ) და არ იღებს პარამეტრებს.

საჯარო: void MyFun (ბათილი) { // ფუნქციის სხეული // ... დაბრუნება; // დაბრუნება ფუნქციიდან, რომელიც მნიშვნელობას არ აბრუნებს } // პროგრამიდან ფუნქციის გამოძახება ... MyFun(); ...

17. შესაძლებელია თუ არა ტიპის ცვლადის გამოცხადებაბათილად პროგრამაში?

ეს შეუძლებელია, რადგან void ტიპი არ არის დაკავშირებული მნიშვნელობასთან.

უქმად ტიპის ცვლადის გამოცხადება იწვევს კომპილაციის შეცდომას შემდეგი შეტყობინებით:

"ტიპის void უკანონო გამოყენება"

18. რა თვისებები აქვს ტიპსვჩარ_ ვიზუალური C++ ?

char ტიპის ცვლადები (იხ. წინა აბზაცები) გამოიყენება 8-ბიტიანი ASCII სიმბოლოების შესანახად.

wchar_t ტიპი გამოიყენება სიმბოლოების შესანახად, რომლებიც დიდი სიმბოლოების ნაკრების ნაწილია. მაგალითად, ჩინურ ანბანს აქვს უამრავი სიმბოლო. 8 ციფრი არ არის საკმარისი ჩინური სიმბოლოების მთელი ნაკრების წარმოსაჩენად. ამიტომ, თუ გჭირდებათ პროგრამის გამოყენება საერთაშორისო ბაზარზე, სასურველია ჩაანაცვლოთ char ტიპის wchar_t.

მაგალითი wchar_t ტიპის გამოყენებით.

... wchar_t t; // t ცვლადისთვის გამოყოფილია მეხსიერების 2 ბაიტი t = "s"; ...

მონაცემების ცვლადებად და მუდმივებად დაყოფის გარდა, არსებობს მონაცემთა კლასიფიკაცია ტიპის მიხედვით. ცვლადების აღწერა უპირველეს ყოვლისა შედგება მათი ტიპის გამოცხადებისგან. მონაცემთა ტიპი ახასიათებს მისი მნიშვნელობების დიაპაზონს და კომპიუტერის მეხსიერებაში წარმოდგენის ფორმას. თითოეულ ტიპს ახასიათებს მონაცემებზე შესრულებული ოპერაციების ნაკრები. ტრადიციულად, ზოგადი დანიშნულების პროგრამირების ენებს აქვთ სტანდარტული ტიპები, როგორიცაა მთელი რიცხვი, რეალური, სიმბოლო და ლოგიკური 3. დაუყოვნებლივ აღვნიშნოთ, რომ C-ში არ არსებობს ლოგიკური ტიპი. გამონათქვამი (კონკრეტულ შემთხვევაში, ცვლადი) ითვლება ჭეშმარიტად, თუ ის არ არის ნულოვანი, წინააღმდეგ შემთხვევაში იგი ითვლება მცდარი.

ორი რიცხვითი ტიპის (მთლიანი და რეალური) არსებობა ასოცირდება კომპიუტერის მეხსიერებაში რიცხვების წარმოდგენის ორ შესაძლო ფორმასთან.

მონაცემები მთელი ტიპიინახება პრეზენტაციის სახით ფიქსირებული წერტილი. იგი ხასიათდება აბსოლუტური სიზუსტით რიცხვების წარმოდგენისა და მათზე მოქმედებების შესრულებისას, ასევე რიცხვების მნიშვნელობების შეზღუდული დიაპაზონით. მთელი რიცხვი გამოიყენება იმ მონაცემებისთვის, რომლებსაც, პრინციპში, არ შეიძლება ჰქონდეს წილადი ნაწილი (ადამიანების რაოდენობა, მანქანები და ა.შ., რიცხვები და მრიცხველები).

აკრიფეთ რეალურიშეესაბამება რიცხვის წარმოდგენის ფორმას მცურავი წერტილი, რომელიც ხასიათდება რიცხვის მიახლოებითი წარმოდგენით მნიშვნელოვანი ციფრების მოცემული რაოდენობით (მანტისის ნიშნები) და რიცხვის რიგის დიდი დიაპაზონი, რაც შესაძლებელს ხდის როგორც ძალიან დიდი, ისე ძალიან მცირე რიცხვების წარმოდგენას აბსოლუტური მნიშვნელობით. რეალური ტიპის მონაცემების მიახლოებითი წარმოდგენის გამო მათი თანასწორობის შედარება არასწორია.

უნივერსალური პროგრამირების ენების თანამედროვე დანერგვაში, როგორც წესი, არსებობს რამდენიმე მთელი რიცხვი და რამდენიმე რეალური ტიპი, რომელთაგან თითოეული ხასიათდება მეხსიერების საკუთარი ზომით, რომელიც გამოყოფილია ერთი მნიშვნელობისთვის და, შესაბამისად, რიცხვების მნიშვნელობების დიაპაზონში, ხოლო რეალური ტიპებისთვის - და მისი სიზუსტე (მანტისას ციფრების რაოდენობა).

მონაცემები პერსონაჟის ტიპიმიიღეთ მნიშვნელობები მოცემული კომპიუტერისთვის დაშვებული სიმბოლოების მთელ კომპლექტზე. ერთი ბაიტი გამოყოფილია ერთი სიმბოლოს მნიშვნელობის შესანახად, კოდირებულია სტანდარტული კოდირების ცხრილის შესაბამისად

C-ში არის 4 ძირითადი ტიპი:

char- პერსონაჟის ტიპი;

ინტ- მთელი ტიპი,

ათწილადი- ერთი ზუსტი რეალური ტიპი,

ორმაგი- ორმაგი სიზუსტით რეალური ტიპი.

მიღებული ტიპების დასადგენად გამოიყენეთ შესარჩევები:მოკლე(მოკლე) - გამოიყენება ტიპით ინტ,გრძელი(გრძელი) - გამოიყენება ტიპებთან ინტდა ორმაგი;ხელი მოაწერა(ნიშნით), ხელმოუწერელი(ხელმოუწერელი) - გამოიყენება ნებისმიერი მთელი ტიპისთვის. სიტყვის ხელმოუწერის არარსებობის შემთხვევაში, მნიშვნელობა ითვლება ხელმოწერილად, ე.ი. ანუ ნაგულისხმევი ხელმოწერილია. კვალიფიკატორებისა და ძირითადი ტიპების სახელების თვითნებური კომბინაციის დასაშვებობის გამო, ერთ ტიპს შეიძლება ჰქონდეს რამდენიმე აღნიშვნა. ინფორმაცია სტანდარტული C ტიპების შესახებ წარმოდგენილია ცხრილებში 1 და 2. სინონიმების აღმწერები ჩამოთვლილია პირველი სვეტის უჯრებში, გამოყოფილი მძიმეებით.

ცხრილი 1. სტანდარტული C მთელი რიცხვის მონაცემთა ტიპები

მონაცემთა ტიპი

ღირებულებების დიაპაზონი

char, ხელმოწერილი char

ხელმოუწერელი int, ხელმოუწერელი

int, ხელმოწერილი int, მოკლე int, მოკლე

2147483648...2147483647

საინტერესოა, რომ C-ში char ტიპის შეიძლება გამოყენებულ იქნას როგორც სიმბოლო ან როგორც მთელი რიცხვი, კონტექსტიდან გამომდინარე.

ცხრილი 2. სტანდარტული C რეალური მონაცემთა ტიპები

კომენტარი.სახელმძღვანელოს პირველი ნაწილისთვის პროგრამების დასაწერად ძირითადად დაგვჭირდება ორი ტიპი:ათწილადიდაინტ.

ამ გაკვეთილზე განვიხილავთ მონაცემთა მთელი რიცხვების ტიპებს, მათ მნიშვნელობების დიაპაზონს, დაყოფას და გადინებას: რა არის ისინი და მაგალითები.

მონაცემთა მთლიანი ტიპები

მთელი რიცხვის მონაცემთა ტიპიარის ტიპი, რომლის ცვლადები შეიძლება შეიცავდეს მხოლოდ მთელ რიცხვებს (ფრაქციული ნაწილის გარეშე, მაგალითად: -2, -1, 0, 1, 2). C++-ში გამოსაყენებლად ხელმისაწვდომია ხუთი ძირითადი მთელი ტიპი:

შენიშვნა: char ტიპი განსაკუთრებული შემთხვევაა, ეს არის როგორც მთელი, ასევე სიმბოლოს მონაცემთა ტიპი. ამის შესახებ უფრო დეტალურად ვისაუბრებთ ერთ-ერთ შემდეგ გაკვეთილზე.

ზემოხსენებულ მთელ ტიპებს შორის მთავარი განსხვავება ისაა, რომ რაც უფრო დიდია ის, მით მეტი მნიშვნელობის შენახვა შეუძლია ამ ტიპის ცვლადს.

მთელი რიცხვის ცვლადების განსაზღვრა

ეს ხდება შემდეგნაირად:

char c; მოკლე int si; // მოქმედებს მოკლე s; //სასურველი int i; ხანგრძლივი int li; // მოქმედებს ხანგრძლივი l; // სასურველია long long int lli; // მოქმედებს long long ll; // სასურველია

მიუხედავად იმისა, რომ სრული სახელები short int , long int , და long long int შეიძლება გამოყენებულ იქნას, მათი შემოკლებული ვერსიები (int-ის გარეშე) სასურველია გამოსაყენებლად. გარდა ამისა, ints-ების გამუდმებით დამატება ართულებს კოდს წასაკითხად (ადვილად აირევა ცვლადში).

მნიშვნელობების დიაპაზონი და მთელი რიცხვის მონაცემთა ტიპების ნიშანი

როგორც უკვე იცით წინა გაკვეთილიდან, ცვლადს, რომელსაც აქვს n-ე რაოდენობის ბიტი, შეუძლია შეინახოს 2n შესაძლო მნიშვნელობა. მაგრამ რა არის ეს მნიშვნელობები? ისინი, რომლებიც დიაპაზონშია. დიაპაზონი- ეს არის მნიშვნელობები, საიდანაც შეიძლება შეინახოს მონაცემთა გარკვეული ტიპი. მთელი რიცხვი ცვლადის დიაპაზონი განისაზღვრება ორი ფაქტორით: მისი ზომა (ბიტებში) და მისი ნიშანი(რაც შეიძლება იყოს ხელი მოაწერაან ხელმოუწერელი).

ხელი მოაწერა(ხელმოწერილი) ნიშნავს, რომ ცვლადი შეიძლება შეიცავდეს როგორც დადებით, ასევე უარყოფით რიცხვებს. ცვლადის ხელმოწერილად გამოსაცხადებლად გამოიყენეთ საკვანძო სიტყვა ხელი მოაწერა:

ხელმოწერილი char c; ხელმოწერილი მოკლე s; ხელმოწერილი int i; ხელმოწერილი ხანგრძლივი l; ხელმოწერილი long long ll;

ხელმოწერილი char c ;

ხელმოწერილი მოკლე s ;

ხელმოწერილი int i ;

ხელმოწერილი ხანგრძლივი l ;

ხელმოწერილი long long ll;

ნაგულისხმევად, ხელმოწერილი საკვანძო სიტყვა იწერება მონაცემთა ტიპამდე.

1-ბაიტიანი ხელმოწერილი მთელი რიცხვი ცვლადი აქვს მნიშვნელობების დიაპაზონს -128-დან 127-მდე. ნებისმიერი მნიშვნელობა -128-დან 127-მდე (მათ შორის) შეიძლება უსაფრთხოდ შეინახოს მასში.

ზოგიერთ შემთხვევაში შეგვიძლია წინასწარ ვიცოდეთ, რომ პროგრამაში უარყოფითი რიცხვები არ იქნება გამოყენებული. ეს ძალიან ხშირია ცვლადების გამოყენებისას რაიმეს რაოდენობის ან ზომის შესანახად (მაგალითად, თქვენი სიმაღლე ან წონა არ შეიძლება იყოს უარყოფითი). მთელი ტიპი ხელმოუწერელი(ხელმოუწერელი) შეიძლება შეიცავდეს მხოლოდ დადებით რიცხვებს. ცვლადის გამოცხადება როგორც ხელმოუწერელი, გამოიყენეთ საკვანძო სიტყვა ხელმოუწერელი:

ხელმოუწერელი char c; ხელმოუწერელი მოკლე s; ხელმოუწერელი int i; ხელმოუწერელი გრძელი l; ხელმოუწერელი long long ll;

ხელმოუწერელი char c ;

ხელმოუწერელი მოკლე s ;

ხელმოუწერელი int i;

ხელმოუწერელი გრძელი l;

ხელმოუწერელი long long ll;

1-ბაიტიანი ხელმოუწერელი მთელი რიცხვი ცვლადის მნიშვნელობების დიაპაზონი 0-დან 255-მდეა.

გთხოვთ გაითვალისწინოთ, რომ ცვლადის ხელმოუწერლად გამოცხადება ნიშნავს, რომ ის არ შეიძლება შეიცავდეს უარყოფით რიცხვებს (მხოლოდ დადებითს).

ახლა, როდესაც გესმით განსხვავება ხელმოწერილსა და ხელმოუწერელს შორის, მოდით შევხედოთ სხვადასხვა ტიპის მონაცემთა მნიშვნელობების დიაპაზონს:

ზომა/ტიპი ღირებულებების დიაპაზონი
ხელმოწერილია 1 ბაიტი -128-დან 127-მდე
1 ბაიტი ხელმოუწერელია 0-დან 255-მდე
ხელმოწერილია 2 ბაიტი -32768-დან 32767-მდე
2 ბაიტი ხელმოუწერელია 0-დან 65 535-მდე
ხელმოწერილია 4 ბაიტი -2 147 483 648-დან 2 147 483 647-მდე
4 ბაიტი ხელმოუწერელია 0-დან 4 294 967 295-მდე
ხელმოწერილია 8 ბაიტი -9 223 372 036 854 775 808-დან 9 223 372 036 854 775 807-მდე
8 ბაიტი ხელმოუწერელია 0-დან 18 446 744 073 709 551 615-მდე

მათემატიკოსებისთვის: ხელმოწერილი ცვლადი, რომელსაც აქვს n-ე რაოდენობის ბიტი, აქვს დიაპაზონი -(2 n-1)-დან 2 n-1 -1-მდე. ხელმოუწერელ ცვლადს, რომელსაც აქვს n-ე რაოდენობის ბიტი, აქვს დიაპაზონი 0-დან (2n)-1-მდე. არამათემატიკოსებისთვის: გამოიყენეთ ცხრილი :)

დამწყები პროგრამისტები ზოგჯერ იბნევიან ხელმოწერილ და ხელმოუწერელ ცვლადებს შორის. მაგრამ არსებობს მარტივი გზა მათი განსხვავებების დასამახსოვრებლად. რა განსხვავებაა უარყოფით რიცხვსა და დადებით რიცხვს შორის? უფლება! მინუსი წინ. თუ არ არის მინუსი, მაშინ რიცხვი დადებითია. მაშასადამე, ხელმოწერილი მთელი რიცხვის ტიპი ნიშნავს, რომ მინუს ნიშანი შეიძლება იყოს, ე.ი. რიცხვები შეიძლება იყოს დადებითი ან უარყოფითი. მთელი რიცხვის დაუწერელი ტიპი ნიშნავს, რომ წინ მინუს ნიშანი სრულიად არ არის, ე.ი. რიცხვები შეიძლება იყოს მხოლოდ დადებითი.

რა არის ნაგულისხმევი: ხელმოწერილი თუ ხელმოუწერელი?

რა მოხდება, თუ ჩვენ გამოვაცხადებთ ცვლადს ხელმოწერის გარეშე ან ხელმოუწერლად?

ყველა მთელი რიცხვის ტიპი, გარდა char-ისა, ხელმოწერილია ნაგულისხმევად. სიმბოლოს ტიპი შეიძლება იყოს ხელმოწერილი ან ხელმოუწერელი (მაგრამ ჩვეულებრივ ხელმოწერილია).

უმეტეს შემთხვევაში, ხელმოწერილი საკვანძო სიტყვა არ იწერება (ის უკვე გამოიყენება ნაგულისხმევად), გარდა char ტიპისა (უმჯობესია აქ განვმარტოთ).

პროგრამისტები, როგორც წესი, თავს არიდებენ ხელმოუწერელი რიცხვების ტიპების გამოყენებას, თუ ამის განსაკუთრებული საჭიროება არ არის, რადგან სტატისტიკის მიხედვით, უფრო მეტი შეცდომა ხდება ხელმოუწერელ ცვლადებთან, ვიდრე ხელმოწერით.

წესი: გამოიყენეთ ხელმოწერილი რიცხვების ტიპები ნაცვლად ხელმოუწერელი.

გადინება

შეკითხვა: „რა მოხდება, თუ ჩვენ ვცდილობთ გამოვიყენოთ მნიშვნელობა, რომელიც სცილდება მონაცემთა გარკვეული ტიპის მნიშვნელობების დიაპაზონს?“ პასუხი: გადინება. გადინება(ინგლისური) "გადინება") ხდება მაშინ, როდესაც ბიტები იკარგება, რადგან ცვლადს არ ჰქონდა გამოყოფილი საკმარისი მეხსიერება მათი შესანახად.

Overflow მაგალითები

განვიხილოთ ხელმოუწერელი ცვლადი, რომელიც შედგება 4 ბიტისაგან. ზემოთ მოცემულ ცხრილში ჩამოთვლილი ნებისმიერი ბინარული რიცხვი ჯდება ამ ცვლადის შიგნით.

"მაგრამ რა მოხდება, თუ ჩვენ ვცდილობთ მივცეთ მნიშვნელობა, რომელიც იკავებს 4 ბიტზე მეტს?" უფლება! გადინება. ჩვენი ცვლადი შეინახავს მხოლოდ 4 ყველაზე ნაკლებად მნიშვნელოვან (მარჯვნივ) ბიტს, დანარჩენი დაიკარგება.

მაგალითად, თუ ჩვენ ვცდილობთ ჩავდოთ რიცხვი 21 ჩვენს 4-ბიტიან ცვლადში:

ათობითი სისტემა ორობითი სისტემა
21 10101

რიცხვი 21 იღებს 5 ბიტს (10101). 4 ბიტი მარჯვნივ (0101) ჯდება ცვლადში, ხოლო მარცხენა ბიტი (1) უბრალოდ დაიკარგება. იმათ. ჩვენი ცვლადი შეიცავს 0101-ს, რაც უდრის 101-ს (წინა ნული არ ითვლის), და ეს უკვე რიცხვია 5 და არა 21.

შენიშვნა: იქნება ცალკე გაკვეთილი ორობითი სისტემიდან რიცხვების ათწილადში და პირიქით გადაქცევაზე, სადაც ყველაფერს დეტალურად განვიხილავთ და განვიხილავთ.

ახლა მოდით შევხედოთ მაგალითს კოდში (მოკლე ტიპი იღებს 16 ბიტს):

#შეიცავს int main() ( unsigned short x = 65535; // უდიდესი მნიშვნელობა, რომელიც შეიძლება შეინახოს 16-ბიტიან ხელმოუწერელ std::cout ცვლადს<< "x was: " << x << std::endl; x = x + 1; // 65536 - это число больше максимально допустимого числа из диапазона допустимых значений. Следовательно, произойдёт переполнение, так как переменнная x не может хранить 17 бит std::cout << "x is now: " << x << std::endl; return 0; }

#შეიცავს

int main()

ხელმოუწერელი მოკლე x = 65535; // ყველაზე დიდი მნიშვნელობა, რომელსაც შეუძლია შეინახოს 16-ბიტიანი ხელმოუწერელი ცვლადი

std::cout<< "x was: " << x << std :: endl ;

x = x + 1; // 65536 არის მოქმედი მნიშვნელობების დიაპაზონის მაქსიმალურ დაშვებულ რიცხვზე მეტი რიცხვი. ამიტომ, გადადინება მოხდება, რადგან ცვლადი x ვერ ინახავს 17 ბიტს

std::cout<< "x is now: " << x << std :: endl ;

დაბრუნება 0;

x იყო: 65535
x არის ახლა: 0

რა მოხდა? გადინება მოხდა იმის გამო, რომ ჩვენ ვცდილობდით შეგვეკრა რაღაც, რისი გადატანა არ შეიძლებოდა x ცვლადში.

მათთვის, ვისაც სურს მეტი იცოდეს:რიცხვი 65535 ბინარში წარმოდგენილია როგორც 1111 1111 1111 1111. 65535 არის ყველაზე დიდი რიცხვი, რომლის შენახვაც შეუძლია 2-ბიტიან (16-ბიტიან) დაუწერელ მთელ ცვლადს, რადგან ის იყენებს ყველა 16 ბიტს. როდესაც დავამატებთ 1-ს, მივიღებთ რიცხვს 65536. რიცხვი 65536 წარმოდგენილია ორობითად, როგორც 1 0000 0000 0000 0000 და იღებს 17 ბიტს! ამიტომ, ყველაზე მნიშვნელოვანი ბიტი (რომელიც არის 1) იკარგება და მარჯვნივ მდებარე 16 ბიტი შენარჩუნებულია. კომბინაცია 0000 0000 0000 0000 შეესაბამება ათობითი 0-ს, რაც არის ჩვენი შედეგი.

ანალოგიურად, ჩვენ მივიღებთ გადადინებას მოქმედი მნიშვნელობების დიაპაზონის მინიმუმზე ნაკლები რიცხვის გამოყენებით:

#შეიცავს int main() ( unsigned short x = 0; // ყველაზე პატარა მნიშვნელობა, რომელიც 2-ბაიტიან ხელმოუწერელ ცვლადს შეუძლია შეინახოს std::cout<< "x was: " << x << std::endl; x = x - 1; // переполнение! std::cout << "x is now: " << x << std::endl; return 0; }

#შეიცავს

int main()

ხელმოუწერელი მოკლე x = 0 ; // უმცირესი მნიშვნელობა, რომელსაც შეუძლია შეინახოს 2-ბაიტი ხელმოუწერელი ცვლადი

std::cout<< "x was: " << x << std :: endl ;

x = x - 1; // გადმოდინება!

std::cout<< "x is now: " << x << std :: endl ;

დაბრუნება 0;

ზემოთ მოცემული პროგრამის გაშვების შედეგი:

x იყო: 0
x არის ახლა: 65535

გადაჭარბება იწვევს ინფორმაციის დაკარგვას, რაც არასდროს არის კარგი. თუ არსებობს თუნდაც მცირედი ეჭვი ან ვარაუდი, რომ ცვლადის მნიშვნელობა შეიძლება იყოს რიცხვი, რომელიც არ არის გამოყენებული მონაცემთა ტიპის დასაშვები მნიშვნელობების ფარგლებს გარეთ, გამოიყენეთ უფრო დიდი მონაცემთა ტიპი!



რაიმე შეკითხვა?

შეატყობინეთ შეცდომას

ტექსტი, რომელიც გაეგზავნება ჩვენს რედაქტორებს: