Karakteri i tipit të plotë zë 1 bajt (8 bit) në memorie dhe ju lejon të shprehni 2^8 vlera = 256 në binar. Lloji char mund të përmbajë edhe pozitive dhe vlerat negative. Gama e vlerave është nga -128 në 127.
Lloji i numrit të plotë uchar gjithashtu merr 1 bajt në memorie, si lloji char, por ndryshe nga ai, uchar është menduar vetëm për vlera pozitive. Vlera minimale është zero, vlera maksimaleështë e barabartë me 255. Shkronja e parë u në emrin e tipit uchar është shkurtim i panënshkruar.
Lloji i plotë i shkurtër ka një madhësi prej 2 byte (16 bit) dhe, në përputhje me rrethanat, ju lejon të shprehni një grup vlerash të barabarta me 2 me fuqinë 16: 2^16 = 65,536 e nënshkruar dhe përmban vlera pozitive dhe negative, vlerat e diapazonit janë midis -32,768 dhe 32,767.
Lloji i shkurtër i panënshkruar është ushort, i cili është gjithashtu 2 bajt në madhësi. Vlera minimale është 0, vlera maksimale është 65,535.
Lloji i plotë int është 4 bajt (32 bit) në madhësi. Vlera minimale është -2,147,483,648, vlera maksimale është 2,147,483,647.
Lloji i plotë i panënshkruar uint zë 4 bajt memorie dhe ju lejon të shprehni vlerat e numrave të plotë nga 0 në 4,294,967,295.
Lloji i plotë i gjatë është 8 bajt (64 bit) në madhësi. Vlera minimale është -9,223,372,036,854,775,808, vlera maksimale është 9,223,372,036,854,775,807.
Lloji i plotë ulong gjithashtu merr 8 bajt dhe mund të ruajë vlera nga 0 në 18,446,744,073,709,551,615.
Shembuj:
char ch= 12 ; |
Për shkak se llojet e numrave të plotë të panënshkruar nuk janë krijuar për të ruajtur vlera negative, përpjekja për të vendosur një vlerë negative mund të ketë pasoja të papritura. Një skenar i pafajshëm si ky do të çojë në një lak të pafund:
Mënyra e duhur do të ishte:
Rezultati:
Ch= -128 u_ch= 128 |
Llojet e të dhënave
Llojet e të dhënave janë veçanërisht të rëndësishme në C# sepse është një gjuhë e shtypur fort. Kjo do të thotë që të gjitha operacionet i nënshtrohen kontrollit të rreptë të tipit nga përpiluesi dhe operacionet e paligjshme nuk përpilohen. Prandaj, kontrolli i rreptë i tipit eliminon gabimet dhe rrit besueshmërinë e programeve. Për të zbatuar kontrollin e tipit, të gjitha variablat, shprehjet dhe vlerat duhet të jenë të një lloji specifik. Nuk ka fare gjë të tillë si një variabël "pa tip" në këtë gjuhë programimi. Për më tepër, lloji i një vlere përcakton operacionet që mund të kryhen në të. Një operacion që është i ligjshëm për një lloj të dhënash mund të mos jetë i vlefshëm për një tjetër.
Ekzistojnë dy kategori të përgjithshme të llojeve të të dhënave të integruara në C#: llojet e vlerave Dhe llojet e referencës. Ato ndryshojnë në përmbajtjen e ndryshores. Konceptualisht, ndryshimi midis të dyve është se një lloj vlere ruan të dhënat drejtpërdrejt, ndërsa një lloj reference ruan një referencë për një vlerë.
Këto lloje ruhen në vende të ndryshme memorie: llojet e vlerave ruhen në një zonë të njohur si pirg, dhe llojet e referencës ruhen në një zonë të quajtur grumbulli i menaxhuar.
Le t'i hedhim një sy llojet e vlerave.
C# përcakton nëntë lloje të numrave të plotë: char, byte, sbyte, i shkurtër, ushort, int, uint, i gjatë dhe i gjatë. Por tipi char përdoret kryesisht për të përfaqësuar personazhet dhe për këtë arsye trajtohet veçmas. Tetë llojet e mbetura të numrave të plotë janë për llogaritjet numerike. Më poshtë janë diapazoni i tyre i numrave dhe thellësia e bitit:
Lloji | Lloji CTS | Madhësia e bitit | Gama |
---|---|---|---|
bajt | Sistemi.Bajt | 8 | 0:255 |
sbyte | Sistemi.SByte | 8 | -128:127 |
i shkurtër | Sistemi.Int16 | 16 | -32768: 32767 |
i shkurtër | Sistemi.UIint16 | 16 | 0: 65535 |
ndër | Sistemi.Int32 | 32 | -2147483648: 2147483647 |
unint | Sistemi.UIint32 | 32 | 0: 4294967295 |
gjatë | Sistemi.Int64 | 64 | -9223372036854775808: 9223372036854775807 |
gjatë | Sistemi.UIint64 | 64 | 0: 18446744073709551615 |
Siç tregon tabela e mësipërme, C# përcakton variantet e nënshkruara dhe të panënshkruara të llojeve të ndryshme të numrave të plotë. Llojet e numrave të plotë me shenjë ndryshojnë nga homologët e tyre të panënshkruar në mënyrën se si interpretojnë pjesën më të rëndësishme të numrit të plotë. Kështu, nëse një program specifikon një vlerë të plotë të nënshkruar, përpiluesi C# do të gjenerojë kodin që përdor bitin më të rëndësishëm të numrit të plotë si flamurin e shenjës. Një numër konsiderohet pozitiv nëse flamuri i shenjës është 0, dhe negativ nëse është 1.
Numrat negativë përfaqësohen pothuajse gjithmonë me metodën e plotësimit të të dyve, ku të gjitha shifrat binare të numrit negativ fillimisht përmbysen dhe më pas atij numri i shtohet 1.
Ndoshta lloji më i zakonshëm i numrit të plotë në programim është lloji int. Variablat e tipit int përdoren shpesh për kontrollin e lakut, indeksimin e vargjeve dhe llogaritjet matematikore. qëllimi i përgjithshëm. Kur keni nevojë për një vlerë të plotë me një gamë më të madhe paraqitjesh sesa lloji int, ekzistojnë një sërë llojesh të tjerë numrash të plotë të disponueshëm për këtë qëllim.
Pra, nëse vlera duhet të ruhet pa një shenjë, atëherë për të mund të zgjidhni lloji uint, për vlera të mëdha të nënshkruara - lloji i gjatë, dhe për vlera të mëdha të panënshkruara - shkruani gjatë. Si shembull, më poshtë është një program që llogarit distancën nga Toka në Diell në centimetra. Për të ruajtur kaq shumë me rëndësi të madhe ai përdor një variabël të tipit long:
Përdorimi i Sistemit; duke përdorur System.Collections.Generic; duke përdorur System.Linq; duke përdorur System.Text; namespace ConsoleApplication1 ( klasa Programi ( static void Main (string args) ( rezultat i gjatë; konst i gjatë km = 149800000; // distanca në km. rezultat = km * 1000 * 100; Console.WriteLine(rezultat); Console.ReadLine(); ) ))
Të gjithë variablave me numra të plotë mund t'u caktohen vlera në shënime dhjetore ose heksadecimal. Në rastin e fundit, kërkohet një prefiks 0x:
Gjatë x = 0x12ab;
Nëse ka ndonjë pasiguri nëse një vlerë e plotë është e tipit int, uint, e gjatë ose ulong, atëherë default int pranohet. Për të specifikuar në mënyrë eksplicite se çfarë lloji tjetër të numrit të plotë duhet të ketë një vlerë, karakteret e mëposhtme mund t'i shtohen një numri:
Uint UI = 1234U; e gjatë l = 1234L; ulong ul = 1234UL;
U dhe L mund të shkruhen gjithashtu me shkronja të vogla, megjithëse një L e vogël mund të ngatërrohet lehtësisht vizualisht me numrin 1 (një).
Llojet me pikë lundruese ju lejojnë të përfaqësoni numrat me një pjesë thyesore. Ekzistojnë dy lloje të llojeve të të dhënave me pikë lundruese në C#: noton Dhe dyfishtë. Ato përfaqësojnë vlera numerike në saktësi të vetme dhe të dyfishtë, respektivisht. Kështu, gjerësia e tipit float është 32 bit, që përafërsisht korrespondon me diapazonin e paraqitjes së numrave nga 5E-45 deri në 3.4E+38. Dhe gjerësia e tipit të dyfishtë është 64 bit, që përafërsisht korrespondon me diapazonin e paraqitjes së numrave nga 5E-324 në 1.7E+308.
Lloji i të dhënave float është menduar për vlera më të vogla me pikë lundruese që kërkojnë më pak saktësi. Lloji i të dhënave të dyfishta është më i madh se float dhe ofron një shkallë më të lartë saktësie (15 bit).
Nëse një vlerë jo e plotë është e koduar në kodin burimor (për shembull, 12.3), atëherë përpiluesi zakonisht supozon se synohet një vlerë e tipit double. Nëse vlera duhet të specifikohet si float, do t'ju duhet t'i bashkëngjitni karakterin F (ose f):
Float f = 12.3F;
Një tip dhjetor është dhënë gjithashtu për të përfaqësuar numrat me pikë lundruese me saktësi të lartë. dhjetore, i cili synohet të përdoret në llogaritjet financiare. Ky lloj ka një gjerësi prej 128 bit për të përfaqësuar vlerat numerike që variojnë nga 1E-28 në 7.9E+28. Ju ndoshta jeni të vetëdijshëm se aritmetika e rregullt me pikë lundruese është e prirur ndaj gabimeve të rrumbullakosjes dhjetore. Këto gabime eliminohen duke përdorur llojin dhjetor, i cili ju lejon të përfaqësoni numrat në 28 (dhe nganjëherë 29) numra dhjetorë. Për shkak se ky lloj i të dhënave mund të përfaqësojë vlera dhjetore pa gabime rrumbullakimi, është veçanërisht i dobishëm për llogaritjet financiare:
Përdorimi i Sistemit; duke përdorur System.Collections.Generic; duke përdorur System.Linq; duke përdorur System.Text; namespace ConsoleApplication1 ( Programi i klasës ( static void Main(string args) ( // *** Llogaritja e kostos së një investimi me *** // *** normë fikse kthimi*** para dhjetore, përqindje; int i; konst byte vjet = 15 ;
Rezultati i këtij programi do të jetë:
Në C#, karakteret përfaqësohen jo në kodin 8-bit, si në shumë gjuhë të tjera programimi si C++, por në kodin 16-bit, të quajtur Unicode. Grupi i karaktereve të Unicode është aq i gjerë sa mbulon personazhe nga pothuajse çdo gjuhë natyrore në botë. Ndërsa shumë gjuhë natyrore, duke përfshirë anglishten, frëngjishten dhe gjermanishten, kanë alfabete relativisht të vogla, disa gjuhë të tjera, si kinezishtja, përdorin grupe mjaft të mëdha karakteresh që nuk mund të përfaqësohen nga një kod 8-bit. Për të kapërcyer këtë kufizim, C# përcakton lloji char, i cili përfaqëson vlera 16-bitësh të panënshkruara që variojnë nga 0 në 65,535 Megjithatë, grupi standard i karaktereve 8-bitësh ASCII është një nëngrup i Unicode që varion nga 0 në 127. Prandaj, karakteret ASCII janë ende të vlefshme në C#.
Në gjuhën C, ekziston një dallim midis koncepteve të "llopit të të dhënave" dhe "modifikuesit të tipit". Lloji i të dhënave është numër i plotë dhe modifikuesi është i nënshkruar ose i panënshkruar. Një numër i plotë i nënshkruar do të ketë vlera pozitive dhe negative, ndërsa një numër i plotë i panënshkruar do të ketë vetëm vlera pozitive. Ekzistojnë pesë lloje themelore në gjuhën C.
Një ndryshore e tipit char ka një madhësi prej 1 bajt, vlerat e saj janë karaktere të ndryshme nga tabela e kodeve, për shembull: 'f', ':', 'j' (kur shkruhen në program, ato janë të mbyllura në një citate).
Madhësia e një variabli të tipit int nuk është përcaktuar në standardin e gjuhës C. Në shumicën e sistemeve të programimit, madhësia e një ndryshoreje int korrespondon me madhësinë e një fjale të tërë makine. Për shembull, në përpiluesit për procesorë 16-bitësh, një variabël int ka një madhësi prej 2 bajt. Në këtë rast, vlerat e nënshkruara të kësaj ndryshore mund të shtrihen në intervalin nga -32768 në 32767.
Fjala kyçe float ju lejon të përcaktoni variabla të llojit real. Vlerat e tyre kanë një pjesë të pjesshme të ndarë me një pikë, për shembull: -5.6, 31.28, etj. Numrat real mund të shkruhen edhe në formë me pikë lundruese, për shembull: -1.09e+4. Numri para simbolit "e" quhet mantisa, dhe pas "e" quhet eksponent. Një variabël i tipit float zë 32 bit në memorie. Mund të marrë vlera në rangun nga 3.4e-38 në 3.4e+38.
Fjala kyçe e dyfishtë ju lejon të përcaktoni një ndryshore reale me saktësi të dyfishtë. Ajo merr dy herë më shumë hapësirë memorie sesa një variabël float. Një ndryshore e tipit të dyfishtë mund të marrë vlera në rangun nga 1.7e-308 në 1.7e+308.
Fjala kyçe void përdoret për të neutralizuar vlerën e një objekti, për shembull, për të deklaruar një funksion që nuk kthen asnjë vlerë.
Programet funksionojnë me të dhëna të ndryshme, të cilat mund të jenë të thjeshta ose të strukturuara. Të dhënat e thjeshta janë numrat e plotë dhe realë, simbolet dhe treguesit (adresat e objekteve në memorie). Numrat e plotë nuk kanë një pjesë thyesore, por numrat realë kanë. Të dhënat e strukturuara janë vargje dhe struktura; ato do të diskutohen më poshtë.
Një variabël është një qelizë në kujtesën e kompjuterit që ka një emër dhe ruan disa vlera. Vlera e një ndryshoreje mund të ndryshojë gjatë ekzekutimit të programit. Kur një vlerë e re shkruhet në një qelizë, ajo e vjetra fshihet.
Është një stil i mirë për t'i emërtuar variablat me kuptim. Emri i ndryshores mund të përmbajë nga një deri në 32 karaktere. Lejohet përdorimi i shkronjave të vogla dhe shkronjat e mëdha, numrat dhe një nënvizim, i cili konsiderohet një shkronjë në C. Karakteri i parë duhet të jetë një shkronjë. Emri i ndryshores nuk mund të përputhet me fjalët e rezervuara.
char është lloji më ekonomik. Lloji char mund të jetë i nënshkruar ose i panënshkruar. Shënohet si "char i nënshkruar" (lloj i nënshkruar) dhe "char i panënshkruar" (lloj i panënshkruar). Lloji i nënshkruar mund të ruajë vlera në intervalin -128 deri +127. E panënshkruar – nga 0 në 255. 1 bajt memorie (8 bit) ndahet për një variabël char.
Fjalët kyçe të nënshkruara dhe të panënshkuara tregojnë se si interpretohet biti zero i ndryshores së deklaruar, d.m.th., nëse është specifikuar fjala kyçe e panënshkruar, atëherë biti zero interpretohet si pjesë e një numri, përndryshe biti zero interpretohet si i nënshkruar.
Vlera e plotë int mund të jetë e shkurtër ose e gjatë. Fjala kyçe e shkurtër vendoset pas fjalëve kyçe të nënshkruara ose të panënshkruara. Pra, ka lloje: int i shkurtër i nënshkruar, i shkurtër int i panënshkruar, i gjatë int i nënshkruar, i gjatë i panënshkruar.
Një variabël i tipit signed short int (numër i plotë i shkurtër i nënshkruar) mund të marrë vlera nga -32768 në +32767, int i shkurtër i panënshkruar (numër i plotë i shkurtër i panënshkruar) - nga 0 në 65535. Secilës prej tyre i ndahen saktësisht dy bajt memorie (16 bit).
Kur deklaroni një variabël të tipit signed short int, fjalë kyçe të nënshkruara dhe të shkurtra mund të hiqen, dhe lloji i tillë variabli mund të deklarohet thjesht int. Është gjithashtu e mundur të deklarohet ky lloj me një fjalë kyçe, të shkurtër.
Një variabël i shkurtër int i panënshkruar mund të deklarohet si int i panënshkruar ose i shkurtër i panënshkruar.
Për çdo vlerë të gjatë int të nënshkruar ose të gjatë int të panënshkruar, ndahen 4 bajt memorie (32 bit). Vlerat e variablave të këtij lloji mund të jenë në intervalet nga -2147483648 në 2147483647 dhe nga 0 në 4294967295, përkatësisht.
Ekzistojnë edhe variabla të tipit long long int, për të cilat ndahen 8 bajt memorie (64 bit). Ato mund të jenë të nënshkruara ose të panënshkruara. Për një lloj të nënshkruar, diapazoni i vlerave është nga -9223372036854775808 deri në 9223372036854775807, për një lloj të panënshkruar - nga 0 në 184467440737095551615. Një fjalë e deklaruar e nënshkruar nga dy mund të jetë gjithashtu e gjatë.
Lloji | Gama | Gama hex | Madhësia |
karakter i panënshkruar | 0 … 255 | 0x00...0xFF | 8 bit |
të nënshkruar char ose thjesht karakter |
-128 … 127 | -0x80…0x7F | 8 bit |
i panënshkruar i shkurtër int ose thjesht i panënshkruar int ose e shkurtër e panënshkruar |
0 … 65535 | 0x0000…0xFFFF | 16 bit |
nënshkruar shkurt int ose nënshkruar int ose thjesht i shkurtër ose ndër |
-32768 … 32767 | 0x8000…0x7FFF | 16 bit |
i panënshkruar gjatë int ose thjesht i panënshkruar gjatë |
0 … 4294967295 | 0x00000000 … 0xFFFFFFFF | 32 bit |
nënshkruar gjatë ose thjesht gjatë |
-2147483648 … 2147483647 | 0x80000000 … 0x7FFFFFFF | 32 bit |
e panënshkruar gjatë e gjatë | 0 … 18446744073709551615 | 0x00000000000000000 … 0xFFFFFFFFFFFFFFFFFF | 64 bit |
firmosur gjatë ose thjesht e gjatë e gjatë |
-9223372036854775808 … 9223372036854775807 | 0x80000000000000000 … 0x7FFFFFFFFFFFFFFFF | 64 bit |
Variablat deklarohen në një deklaratë deklarimi. Një deklaratë deklarimi përbëhet nga një specifikim tipi dhe një listë e ndarë me presje të emrave të variablave. Duhet të ketë një pikëpresje në fund.
[modifikuesit] identifikuesi i llojit_specifikues [, identifikuesi] ...
Modifikuesit – fjalë kyçe të nënshkruara, të panënshkruara, të shkurtra, të gjata.
Një specifikues tipi është një fjalë kyçe char ose int që specifikon llojin e ndryshores që deklarohet.
Identifikuesi është emri i ndryshores.
Char x;
int a, b, c;
i panënshkruar i gjatë i gjatë y;
Kur deklarohet, një variabël mund të inicializohet, domethënë t'i caktohet një vlerë fillestare.
Int x = 100;
Kur deklarohet, ndryshorja x do të përmbajë menjëherë numrin 100. Është më mirë të deklarohen variablat e inicializuar në rreshta të veçantë.
Përditësimi i fundit: 13.11.2017
Ashtu si shumë gjuhë programimi, C# ka sistemin e vet të tipit të të dhënave që përdoret për të krijuar variabla. Një lloj i të dhënave përcakton paraqitjen e brendshme të të dhënave, grupin e vlerave që mund të marrë një objekt dhe veprimet e vlefshme që mund të kryhen në objekt.
Gjuha C# ka llojet e mëposhtme primitive të të dhënave:
bool : ruan vlerën true ose false (literale boolean). Përfaqësohet nga lloji i sistemit System.Boolean
Bool gjallë = e vërtetë; bool është i vdekur = fals;
byte: ruan një numër të plotë nga 0 në 255 dhe zë 1 bajt. Përfaqësohet nga lloji i sistemit System.Byte
Bit bit1 = 1; byte bit2 = 102;
sbyte: ruan një numër të plotë nga -128 në 127 dhe zë 1 bajt. Përfaqësohet nga lloji i sistemit System.SByte
Sbyte bit1 = -101; sbyte bit2 = 102;
ushort: ruan një numër të plotë nga 0 në 65535 dhe merr 2 bajt. Përfaqësohet nga lloji i sistemit System.UInt16
Short n1 = 1; shkurt n2 = 102;
int: ruan një numër të plotë nga -2147483648 në 2147483647 dhe zë 4 bajt. Përfaqësohet nga lloji i sistemit System.Int32. Të gjitha literalet e numrave të plotë përfaqësojnë vlerat int si parazgjedhje:
Int a = 10; int b = 0b101; // forma binare b =5 int c = 0xFF; // Forma heksadecimal c = 255
uint: ruan një numër të plotë nga 0 në 4294967295 dhe zë 4 bajt. Përfaqësohet nga lloji i sistemit System.UInt32
Njësia a = 10; njësia b = 0b101; njësia c = 0xFF;
long : ruan një numër të plotë nga –9,223,372,036,854,775,808 deri në 9,223,372,036,854,775,807 dhe zë 8 byte. Përfaqësohet nga lloji i sistemit System.Int64
Gjatë a = -10; gjatë b = 0b101; e gjatë c = 0xFF;
ulong: ruan një numër të plotë nga 0 në 18,446,744,073,709,551,615 dhe merr 8 byte. Përfaqësohet nga lloji i sistemit System.UInt64
Gjatë a = 10; gjatësi b = 0b101; gjatë c = 0xFF;
float: ruan një numër me pikë lundruese nga -3.4*10 38 në 3.4*10 38 dhe zë 4 bajt. Përfaqësohet nga lloji i sistemit System.Single
double : ruan një numër me pikë lundruese nga ±5.0*10 -324 në ±1.7*10 308 dhe zë 8 bajt. Përfaqësohet nga lloji i sistemit System.Double
dhjetore: ruan një numër thyese dhjetore. Nëse përdoret pa një pikë dhjetore, ai ka një vlerë nga ±1.0*10 -28 në ±7.9228*10 28, mund të ruajë 28 shifra dhjetore dhe zë 16 bajt. Përfaqësohet nga lloji i sistemit System.Decimal
char: ruan një karakter të vetëm në Unicode dhe zë 2 bajt. Përfaqësohet nga lloji i sistemit System.Char. Literalet e karaktereve korrespondojnë me këtë lloj:
Char a = "A"; char b = "\x5A"; char c = "\u0420";
string: ruan një grup karakteresh Unicode. Përfaqësohet nga lloji i sistemit System.String. Literalet e karaktereve korrespondojnë me këtë lloj.
String hello = "Përshëndetje"; varg fjalë = "botë";
objekt: Mund të ruajë një vlerë të çdo lloji të të dhënave dhe zë 4 bajt në një platformë 32-bit dhe 8 bajt në një platformë 64-bit. Përfaqësohet nga lloji i sistemit System.Object, i cili është lloji bazë për të gjitha llojet dhe klasat e tjera .NET.
Objekti a = 22; objekti b = 3,14; objekti c = "kodi i përshëndetjes";
Për shembull, le të përcaktojmë disa variabla lloje të ndryshme dhe printoni vlerat e tyre në tastierë:
Përdorimi i Sistemit; namespace HelloApp ( class Program ( static void Main(string args) ( emri i vargut = "Tom"; int age = 33; bool isEmployed = false; peshë e dyfishtë = 78.65; Console.WriteLine ($"Emri: (emri)"); Console.WriteLine($"Mosha: (mosha)";
Për të nxjerrë të dhëna në tastierë, këtu përdoret interpolimi: një shenjë $ vendoset përpara rreshtit dhe pas kësaj mund të futim vlera të ndryshueshme në rresht në kllapa kaçurrelë. Dalja e konsolës së programit:
Emri: Tom Mosha: 33 Pesha: 78.65 Punimet: E rreme
Kur caktoni vlera, duhet të keni parasysh hollësinë e mëposhtme: të gjitha literalet reale trajtohen si vlera të tipit të dyfishtë. Dhe për të treguar se një numër thyesor përfaqëson një lloj float ose një tip dhjetor, duhet të shtoni një prapashtesë në fjalëpërfjalisht: F/f për float dhe M/m për dhjetore.
Në mënyrë të ngjashme, të gjitha literalet e numrave të plotë trajtohen si vlera int. Për të treguar qartë se një literal i plotë përfaqëson një vlerë të tipit uint, përdorni prapashtesën U/u, për tipin long përdorni prapashtesën L/l dhe për tipin ulong përdorni prapashtesën UL/ul:
Njësia a = 10U; i gjatë b = 20L; gjatë c=30UL;
Më lart, kur renditen të gjitha llojet bazë të të dhënave, lloji i sistemit u përmend për secilin. Sepse emri i një lloji të integruar është në thelb një stenografi për një lloj sistemi. Për shembull, variablat e mëposhtëm do të jenë ekuivalent në lloj:
Int a = 4; Sistemi.Int32 b = 4;
Më parë, ne specifikuam në mënyrë eksplicite llojin e variablave, për shembull, int x; . Dhe përpiluesi, kur u nis, e dinte tashmë se x ruan një vlerë të plotë.
Sidoqoftë, ne mund të përdorim gjithashtu modelin e shtypjes së nënkuptuar:
Var hello = "Ferri në botë"; var c = 20; Console.WriteLine(c.GetType().ToString()); Console.WriteLine(hello.GetType().ToString());
Për shtypjen e nënkuptuar, fjala kyçe var përdoret në vend të emrit të llojit të të dhënave. Më pas, gjatë përpilimit, vetë përpiluesi konstaton llojin e të dhënave bazuar në vlerën e caktuar. Shembulli i mësipërm përdori shprehjen Console.WriteLine(c.GetType().ToString()); , e cila na lejon të zbulojmë llojin e konkluduar të ndryshores c. Meqenëse si parazgjedhje të gjitha vlerat e numrave të plotë trajtohen si vlera int, ndryshorja c do të përfundojë të jetë e tipit int ose System.Int32
Këto ndryshore janë të ngjashme me ato të zakonshme, por ato kanë disa kufizime.
Së pari, ne nuk mund të deklarojmë fillimisht një variabël të shtypur në mënyrë implicite dhe pastaj ta inicializojmë atë:
// ky kod funksionon në një; a = 20; // ky kod nuk funksionon var c; c= 20;
Së dyti, ne nuk mund të specifikojmë null si vlerën e një ndryshoreje të shtypur në mënyrë implicite:
// ky kod nuk funksionon var c=null;
Meqenëse vlera është null, përpiluesi nuk do të jetë në gjendje të konkludojë llojin e të dhënave.
Nga lista e mësipërme e llojeve të të dhënave, është e qartë se nëse duam të përdorim numra deri në 256 në një program, atëherë mund të përdorim variabla të tipit bajt për t'i ruajtur ato. Kur përdorim vlera të mëdha, mund të marrim tipin short, int, long. E njëjta gjë vlen edhe për numrat thyesorë - për numrat e zakonshëm thyesorë mund të merrni tipin float, për numrat thyesorë shumë të mëdhenj - llojin e dyfishtë. Lloji dhjetor qëndron i ndarë këtu në kuptimin që pavarësisht kapacitetit të tij më të madh të biteve në krahasim me tipin e dyfishtë, tipi i dyfishtë mund të ruajë vlerë më të lartë. Megjithatë, një vlerë dhjetore mund të përmbajë deri në 28 shifra dhjetore, ndërsa një vlerë e dyfishtë mund të përmbajë 15-16 shifra dhjetore.
Dhjetorja përdoret më shpesh në llogaritjet financiare, ndërsa dyfishi përdoret më shpesh në veprimet matematikore. Dallimet e përgjithshme midis këtyre dy llojeve mund të përmblidhen në tabelën e mëposhtme.
Kjo fletë mashtrimi jep informacion në lidhje me llojet kryesore të të dhënave të gjuhës së programimit C++ dhe veçoritë e zbatimit të tyre. Gjithashtu, në fund të regjistrimit ka një tabelë me diapazonin e vlerave të këtyre llojeve.
Qëllimi kryesor i çdo programi është përpunimi i të dhënave. Të dhënat lloje të ndryshme ruhen dhe përpunohen ndryshe. Në çdo gjuhë algoritmike, çdo konstante, variabël, shprehje ose funksion duhet të ketë një lloj specifik.
Lloji i të dhënave përcakton:
Bazuar në këto karakteristika, programuesi zgjedh llojin e çdo sasie të përdorur në program për të përfaqësuar objektet reale. Një deklaratë e kërkuar e llojit lejon kompajlerin të kontrollojë për vlefshmërinë dizajne të ndryshme programet. Lloji i vlerës përcakton udhëzimet e makinës që do të përdoren për të përpunuar të dhënat.
Të gjitha llojet e gjuhës C++ mund të ndahen në bazë Dhe të përbëra . Gjuha C++ përcakton gjashtë kryesore llojet e të dhënave për të përfaqësuar vlera të plota, reale, karaktere dhe logjike. Bazuar në këto lloje, programuesi mund të vendosë një përshkrim të përbëra llojet. Këto përfshijnë vargje, numërime, funksione, struktura, referenca, tregues, bashkime dhe klasa.
Llojet bazë (standarde) të të dhënave shpesh quhen aritmetike sepse ato mund të përdoren në veprime aritmetike. Për të përshkruar llojet kryesore, përcaktohen si më poshtë:
Katër llojet e para quhen numër i plotë ( e tërë ), dy të fundit - Llojet me pikë lundruese . Kodi që gjeneron përpiluesi për trajtimin e vlerave të numrave të plotë është i ndryshëm nga kodi për vlerat me pikë lundruese.
Janë katër specifikues i tipit , duke sqaruar përfaqësimin e brendshëm dhe gamën e vlerave të llojeve standarde:
Madhësia e llojit int nuk përcaktohet nga standardi, por varet nga kompjuteri dhe kompajleri. Për një procesor 16-bit, 2 bajt ndahen për vlerat e këtij lloji, për një procesor 32-bit - 4 bajt.
Specifikuesi i shkurtër përpara emrit të tipit i tregon kompajlerit se 2 bajt duhet të ndahen për numrin, pavarësisht nga kapaciteti i bitit të procesorit. Specifikuesi i gjatë do të thotë që vlera e numrit të plotë do të zërë 4 bajt. Pra, në një kompjuter 16-bitësh ekuivalentët janë int dhe short int, dhe në një kompjuter 32-bit ekuivalentët janë int dhe long int.
Përfaqësimi i brendshëm vlerat e llojit të numrit të plotë - një numër i plotë në kodin binar. Kur përdorni specifikuesin e nënshkruar, biti më domethënës i numrit interpretohet si i nënshkruar (0 është një numër pozitiv, 1 është një numër negativ). Specifikuesi i panënshkruar lejon që të përfaqësohen vetëm numra pozitivë, pasi biti më domethënës trajtohet si pjesë e kodit të numrit. Kështu, diapazoni i vlerave të llojit int varet nga specifikuesit. Gama e vlerave të vlerave të tipit të plotë me specifikues të ndryshëm për kompjuterët e pajtueshëm me IBM PC jepen në tabelën "Sferat e vlerave të llojeve të thjeshta të të dhënave" në fund të hyrjes.
Si parazgjedhje, të gjitha llojet e numrave të plotë konsiderohen të nënshkruar, që do të thotë se specifikuesi i nënshkruar mund të hiqet.
Konstantet që gjenden në një program caktohen një lloj ose një tjetër në përputhje me llojin e tyre. Nëse për ndonjë arsye programuesi nuk është i kënaqur me këtë lloj, ai mund të tregojë në mënyrë eksplicite llojin e kërkuar duke përdorur prapashtesat L, l (e gjatë) dhe U, u (të panënshkruara). Për shembull, konstantja 32L do të jetë e tipit të gjatë dhe do të zërë 4 bajt. Ju mund të përdorni prapashtesat L dhe U në të njëjtën kohë, për shembull, 0x22UL ose 05Lu.
Shënim
Llojet short int, long int, signed int dhe unsigned int mund të shkurtohen përkatësisht në short, long, signed dhe unsigned.
Vlera e një tipi karakteresh i ndahet një numri bajtësh të mjaftueshëm për të akomoduar çdo karakter nga grupi i karaktereve për një kompjuter të caktuar, i cili është ai që përcakton emrin e llojit. Zakonisht kjo është 1 bajt. Lloji char, si llojet e tjera të numrave të plotë, mund të jetë i nënshkruar ose i panënshkruar. Vlerat e nënshkruara mund të ruajnë vlera në intervalin -128 deri në 127. Duke përdorur specifikuesin e panënshkruar, vlerat mund të variojnë nga 0 në 255. Kjo është e mjaftueshme për të ruajtur çdo karakter në grupin e karaktereve ASCII me 256 karaktere. Vlerat e llojit char përdoren gjithashtu për të ruajtur numra të plotë që nuk i kalojnë kufijtë e diapazoneve të specifikuara.
Lloji wchar_t është krijuar për të punuar me një grup karakteresh për të cilët 1 bajt nuk mjafton për të koduar, për shembull, Unicode. Madhësia e këtij lloji varet nga zbatimi; si rregull i korrespondon tipit short. Konstantet e vargut të tipit wchar_t shkruhen me parashtesën L, për shembull, L»Gates».
Vlerat Boolean mund të marrin vetëm vlerat "true" dhe "false", të cilat janë fjalë të rezervuara. Forma e brendshme e paraqitjes së vlerës false është 0 (zero). Çdo vlerë tjetër interpretohet si e vërtetë. Kur konvertohet në një tip numër të plotë, true ka vlerën 1.
Standardi C++ përcakton tre lloje të dhënash për ruajtjen e vlerave reale: float, double dhe long double.
Llojet e të dhënave me pikë lundruese ruhen ndryshe në memorien e kompjuterit sesa llojet e të dhënave të plota. Paraqitja e brendshme e një numri real përbëhet nga dy pjesë - mantisa dhe eksponenti. Në kompjuterët e pajtueshëm me IBM PC, vlerat float zënë 4 bajt, nga të cilat një shifër binare ndahet për shenjën e mantisës, 8 bit për eksponentin dhe 23 për mantisën. Mantisa është një numër më i madh se 1.0 por më i vogël se 2.0. Meqenëse shifra kryesore e mantisës është gjithmonë 1, ajo nuk ruhet.
Për vlerat e dyfishta që zënë 8 bajt, 11 dhe 52 bit ndahen për eksponentin dhe mantisën, përkatësisht. Gjatësia e mantisës përcakton saktësinë e numrit, dhe gjatësia e eksponentit përcakton diapazonin e tij. Siç mund ta shihni nga tabela në fund të hyrjes, me të njëjtin numër bajtësh të ndarë për vlerat float dhe int të gjata, diapazoni i vlerave të tyre të lejueshme ndryshojnë shumë. për shkak të formës së përfaqësimit të brendshëm.
Specifikuesi i gjatë përpara një emri të tipit të dyfishtë tregon se 10 bajt janë ndarë për vlerën e tij.
Konstantet me pikë lundruese janë të tipit të dyfishtë si parazgjedhje. Ju mund të specifikoni në mënyrë eksplicite llojin e një konstante duke përdorur prapashtesat F, f (float) dhe L, l (e gjatë). Për shembull, konstantja 2E+6L do të jetë e tipit long double, dhe konstantja 1.82f do të jetë e tipit float.
Për të shkruar programe që janë portative nëpër platforma, nuk mund të bëni supozime për madhësinë e llojit int. Për ta marrë atë, duhet të përdorni operacionin e madhësisë, rezultati i të cilit është madhësia e llojit në bajt. Për shembull, për sistemi operativ Madhësia e MS-DOS (int) do të rezultojë në 2, por për Windows 98 ose OS/2 rezultati do të jetë 4.
Standardi ANSI nuk specifikon diapazonin e vlerave për llojet bazë përcaktohen vetëm marrëdhëniet midis madhësive të tyre, për shembull:
madhësia (noton) ≤ slzeof (dyfish) ≤ madhësia (dyfish i gjatë)
madhësia e (char) ≤ slzeof (e shkurtër) ≤ madhësia e (int) ≤ madhësia e (e gjatë)
Shënim
Vlerat minimale dhe maksimale të lejuara për llojet e numrave të plotë varen nga zbatimi dhe jepen në skedarin e kokës
Përveç atyre të listuara, llojet kryesore të gjuhës përfshijnë llojin e zbrazët, por grupi i vlerave të këtij lloji është bosh. Përdoret për të përcaktuar funksionet që nuk kthejnë një vlerë, për të specifikuar një listë të zbrazët të argumenteve të funksionit, si llojin bazë për treguesit, dhe në operacionet e hedhjes së tipit.
Pyetje: Çfarë do të thotë termi kompjuter i pajtueshëm me IBM PC?
Përgjigje: Një kompjuter i pajtueshëm me IBM PC është një kompjuter që është arkitekturisht afër IBM PC, XT dhe AT. Kompjuterët e pajtueshëm me IBM PC janë ndërtuar mbi mikroprocesorë të përputhshëm me Intel 8086 (dhe, siç e dini, të gjithë ata të lëshuar më vonë Procesorët Intel janë plotësisht të përputhshme me 8086). Në fakt, këta janë pothuajse të gjithë kompjuterë modernë.
Lloje të ndryshme të llojeve të numrave të plotë dhe realë, të ndryshëm në diapazonin dhe saktësinë e paraqitjes së të dhënave, u prezantuan për t'i dhënë programuesit mundësinë për të përdorur në mënyrë më efektive aftësitë e pajisjeve specifike, pasi shpejtësia e llogaritjeve dhe sasia e kujtesës varen nga zgjedhja e llojit. Por një program i optimizuar për një lloj kompjuteri mund të mos jetë i lëvizshëm në platforma të tjera, kështu që në përgjithësi duhet të shmangni mbështetjen në karakteristikat specifike të llojeve të të dhënave.
Lloji | Gama e vlerave | Madhësia (bajt) |
bool | e vërtetë dhe e rreme | 1 |
të nënshkruar char | -128 … 127 | 1 |
karakter i panënshkruar | 0 … 255 | 1 |
nënshkruar shkurt int | -32 768 … 32 767 | 2 |
i panënshkruar i shkurtër int | 0 … 65 535 | 2 |
nënshkruar gjatë int | -2 147 483 648 … 2 147 483 647 | 4 |
i panënshkruar gjatë int | 0 … 4 294 967 295 | 4 |
noton | 3.4e-38 … 3.4e+38 | 4 |
dyfishtë | 1.7e-308 … 1.7C+308 | 8 |
dyfish i gjatë | 3.4e-4932 … 3.4e+4932 | 10 |
Për llojet reale, tabela tregon vlerat absolute të vlerave minimale dhe maksimale.