Vrste char, short, int i long. Tipovi podataka i varijable Numerički tipovi podataka u c

Ovaj cheat sheet pruža informacije o glavnim tipovima podataka programskog jezika C++ i karakteristikama njihove implementacije. Takođe, na kraju zapisa nalazi se tabela sa rasponima vrednosti ovih tipova.

Koncept tipa podataka

Glavna svrha svakog programa je obrada podataka. Različite vrste podataka se pohranjuju i obrađuju različito. U bilo kom algoritamskom jeziku, svaka konstanta, varijabla, izraz ili funkcija mora imati specifičan tip.

Tip podataka definira:

  • interno predstavljanje podataka u memoriji računala;
  • skup vrijednosti koje količine ovog tipa mogu poprimiti;
  • operacije i funkcije koje se mogu primijeniti na količine ovog tipa.

Na osnovu ovih karakteristika, programer bira tip svake veličine koja se koristi u programu za predstavljanje stvarnih objekata. Potrebna deklaracija tipa omogućava kompajleru da provjeri valjanost različitih programskih konstrukcija. Tip vrijednosti određuje strojne instrukcije koje će se koristiti za obradu podataka.

Sve vrste jezika C++ mogu se podijeliti na osnovni I kompozitni . Jezik C++ definiše šest main tipovi podataka za predstavljanje cjelobrojnih, realnih, znakovnih i logičkih vrijednosti. Na osnovu ovih tipova, programer može uneti opis kompozitni vrste. To uključuje nizove, enumeracije, funkcije, strukture, reference, pokazivače, unije i klase.

Osnovni tipovi podataka u C++

Osnovni (standardni) tipovi podataka se često nazivaju aritmetičkim jer se mogu koristiti u aritmetičkim operacijama. Da bismo opisali glavne tipove, definirano je sljedeće:

  1. int(int);
  2. char(char);
  3. wchar_t(widechar);
  4. bool(boolean);
  5. float (stvarno);
  6. duplo (stvarno dvostruke preciznosti).

Prva četiri tipa nazivaju se cijeli brojevi ( cijeli ), zadnja dva - vrste s pomičnim zarezom . Kod koji kompajler generiše za rukovanje cjelobrojnim vrijednostima razlikuje se od koda za vrijednosti s pomičnim zarezom.

Ima ih četiri specificator tipa , pojašnjavajući internu reprezentaciju i raspon vrijednosti standardnih tipova:

  • kratko (kratko);
  • dugo (dugo);
  • potpisan(potpisan);
  • nepotpisan.

Cjelobrojni tip (int)

Veličina tipa int nije definisana standardom, već zavisi od računara i kompajlera. Za 16-bitni procesor, 2 bajta se dodjeljuju za vrijednosti ovog tipa, za 32-bitni procesor - 4 bajta.

Kratki specificator ispred imena tipa ukazuje kompajleru da 2 bajta moraju biti dodijeljena za broj, bez obzira na kapacitet procesora. Long specifikacija znači da će cjelobrojna vrijednost zauzeti 4 bajta. Dakle, na 16-bitnom računaru ekvivalenti su int i short int, a na 32-bitnom računaru ekvivalenti su int i long int.

Interno zastupanje vrijednosti cjelobrojnog tipa - cijeli broj u binarnom kodu. Kada se koristi specifikacija sa znakom, najznačajniji bit broja se tumači kao predznak (0 je pozitivan broj, 1 je negativan broj). Specifikator bez znaka dozvoljava samo pozitivne brojeve da budu predstavljeni, pošto se najznačajniji bit tretira kao deo koda broja. Dakle, raspon vrijednosti tipa int ovisi o specifikacijama. Opseg vrijednosti vrijednosti cjelobrojnog tipa sa različitim specifikacijama za IBM PC kompatibilna računala dati su u tabeli „Rasponi vrijednosti jednostavnih tipova podataka“ na kraju unosa.

Prema zadanim postavkama, svi cjelobrojni tipovi se smatraju potpisanim, što znači da se specifikacija potpisanog može izostaviti.

Konstante koje se nalaze u programu dodjeljuju se jednom ili drugom tipu u skladu sa njihovim tipom. Ako iz nekog razloga programer nije zadovoljan ovim tipom, može eksplicitno naznačiti traženi tip koristeći sufikse L, l (dugo) i U, u (neoznačeno). Na primjer, konstanta 32L će biti tipa long i zauzimati 4 bajta. Možete koristiti sufikse L i U u isto vrijeme, na primjer, 0x22UL ili 05Lu.

Bilješka

Tipovi short int, long int, signed int i unsigned int mogu biti skraćeni na short, long, signed i unsigned, respektivno.

Vrsta znaka (char)

Vrijednost tipa karaktera dodjeljuje se broj bajtova koji je dovoljan da primi bilo koji znak iz skupa znakova za dati računar, što je ono što određuje ime tipa. Obično je to 1 bajt. Tip char, kao i drugi tipovi cijelih brojeva, može biti potpisan ili nepotpisan. Potpisane vrijednosti mogu pohraniti vrijednosti u rasponu od -128 do 127. Koristeći neoznačeni specificer, vrijednosti mogu biti u rasponu od 0 do 255. Ovo je dovoljno za pohranjivanje bilo kojeg znaka u skupu ASCII znakova od 256 znakova. Vrijednosti tipa char se također koriste za pohranjivanje cijelih brojeva koji ne prelaze granice specificiranih raspona.

Prošireni tip znakova (wchar_t)

Tip wchar_t je dizajniran da radi sa skupom znakova za koje 1 bajt nije dovoljan za kodiranje, na primjer, Unicode. Veličina ovog tipa zavisi od implementacije; po pravilu odgovara tipu kratkog. String konstante tipa wchar_t se pišu sa prefiksom L, na primjer, L»Gates».

Boolean tip (bool)

Booleove vrijednosti mogu uzeti samo vrijednosti true i false, koje su rezervirane riječi. Interni oblik predstavljanja vrijednosti false je 0 (nula). Svaka druga vrijednost se tumači kao tačna. Kada se konvertuje u cjelobrojni tip, true ima vrijednost 1.

Tipovi s pomičnim zarezom (float, dupli i long double)

C++ standard definira tri tipa podataka za pohranjivanje stvarnih vrijednosti: float, double i long double.

Tipovi podataka s pomičnim zarezom pohranjuju se drugačije u memoriji računala od cjelobrojnih tipova podataka. Unutrašnji prikaz realnog broja sastoji se od dva dijela - mantise i eksponenta. Na IBM PC kompatibilnim računalima, float vrijednosti zauzimaju 4 bajta, od kojih je jedna binarna znamenka dodijeljena za znak mantise, 8 bita za eksponent i 23 za mantisu. Mantisa je broj veći od 1,0, ali manji od 2,0. Pošto je vodeća znamenka mantise uvijek 1, ona se ne pohranjuje.

Za dvostruke vrijednosti koje zauzimaju 8 bajtova, 11 i 52 bita se dodjeljuju za eksponent i mantisu, respektivno. Dužina mantise određuje preciznost broja, a dužina eksponenta određuje njegov raspon. Kao što možete vidjeti iz tabele na kraju unosa, s istim brojem bajtova dodijeljenih za float i long int vrijednosti, rasponi njihovih dozvoljenih vrijednosti se uvelike razlikuju zbog unutrašnjeg oblika zastupanja.

Long specifikacija prije imena dvostrukog tipa označava da je za njegovu vrijednost dodijeljeno 10 bajtova.

Konstante s pomičnim zarezom su po defaultu dvostrukog tipa. Možete eksplicitno odrediti tip konstante koristeći sufikse F, f (float) i L, l (dugo). Na primjer, konstanta 2E+6L će biti tipa long double, a konstanta 1.82f će biti tipa float.

Da biste pisali programe koji su prenosivi na više platformi, ne možete praviti pretpostavke o veličini tipa int. Da biste ga dobili, morate koristiti operaciju sizeof, čiji je rezultat veličina tipa u bajtovima. Na primjer, za operativni sistem MS-DOS sizeof (int) će rezultirati 2, ali za Windows 98 ili OS/2 rezultat će biti 4.

ANSI standard ne specificira raspon vrijednosti za osnovne tipove; definirani su samo odnosi između njihovih veličina, na primjer:

sizeof(float) ≤ slzeof(double) ≤ sizeof(dugi dupli)
sizeof(char) ≤ slzeof(short) ≤ sizeof(int) ≤ sizeof(long)

Bilješka

Minimalne i maksimalne dozvoljene vrijednosti za cjelobrojne tipove ovise o implementaciji i date su u datoteci zaglavlja (), karakteristike stvarnih tipova - u datoteci (), kao i u predlošku klase numeric_limits

tip void

Pored navedenih, glavni tipovi jezika uključuju tip void, ali je skup vrijednosti ovog tipa prazan. Koristi se za definiranje funkcija koje ne vraćaju vrijednost, za specificiranje prazne liste argumenata funkcije, kao osnovnog tipa za pokazivače i u operacijama prelijevanja tipa.

Rasponi vrijednosti jednostavnih tipova podataka u C++ za IBM PC kompatibilna računala

P: Šta znači pojam IBM PC kompatibilan računar?
O: IBM PC kompatibilan računar je računar koji je arhitektonski blizak IBM PC-u, XT i AT. IBM PC kompatibilni računari su izgrađeni na mikroprocesorima kompatibilnim sa Intel 8086 (i, kao što znate, svi kasniji Intel procesori su potpuno unazad kompatibilni sa 8086). U stvari, to su skoro svi savremeni računari.

Uvedeni su različiti tipovi cjelobrojnih i realnih tipova, koji se razlikuju po opsegu i tačnosti predstavljanja podataka, kako bi se programeru pružila mogućnost da najefikasnije koristi mogućnosti određene opreme, jer brzina proračuna i količina memorije zavise od izbor tipa. Ali program optimizovan za jedan tip računara možda neće biti prenosiv na druge platforme, tako da generalno treba izbegavati oslanjanje na specifične karakteristike tipova podataka.

Tip Raspon vrijednosti Veličina (bajtovi)
bool istinito i netačno 1
signed char -128 … 127 1
unsigned char 0 … 255 1
potpisan kratki int -32 768 … 32 767 2
unsigned short int 0 … 65 535 2
potpisan long int -2 147 483 648 … 2 147 483 647 4
unsigned long int 0 … 4 294 967 295 4
float 3.4e-38 … 3.4e+38 4
duplo 1.7e-308 … 1.7C+308 8
dugačak dupli 3.4e-4932 … 3.4e+4932 10

Za stvarne tipove, tabela prikazuje apsolutne vrijednosti minimalnih i maksimalnih vrijednosti.

odgovor:
  1. Cjelobrojni tipovi podataka:

kratki int, nepotpisani kratki int, int, nepotpisani int, dugi, nepotpisani dugo.

  1. Tipovi podataka s pomičnim zarezom (koji odgovaraju stvarnim tipovima):

plutajući, dupli, dugi dupli.

  1. Vrsta podataka o znaku:

char (potpisani znak), nepotpisani znak, wchar_t.

  1. Boolean tip podataka:

bool.

  1. Nabrojani tip podataka (uveden u Visual C++):

enum.

2. Koje su karakteristike korištenja cjelobrojnih tipova podataka?

U C++, glavni cjelobrojni tipovi podataka su: kratki int, nepotpisani kratki int, int, unsigned int, dugi (dugi int), nepotpisani dugi (unsigned long int).

Ovi tipovi podataka predstavljaju vrijednosti iz skupa cijelih brojeva. Na primjer:

2 -100 398

Tipovi podataka koji počinju s nepotpisanim prefiksom mogu sadržavati samo pozitivne brojeve.

Podaci tipa short int, unsigned short int zauzimaju upola manje memorijskog prostora od podataka tipa int, unsigned int.

Podaci tipa long, unsigned long zauzimaju dvostruko više memorijskog prostora od podataka tipa int, unsigned int.

3. Kako opisati varijablu pod nazivom x cjelobrojnog tipa u programu?

odgovor:
int x; // predpisani cijeli broj

Kao rezultat, ispod varijable x bit će dodijeljen memorijski prostor od 4 bajta. Veličina memorije koja se dodeljuje za promenljivu zavisi od karakteristika računara, tipa operativnog sistema i postavki kompajlera.

4. Kako upisati broj 239 u varijablu cjelobrojnog tipa?

Da biste to učinili, koristite operator dodjeljivanja, koji je označen simbolom '='.

Odgovor 1. Unošenje broja u varijablu nakon njenog opisa.

int x; x = 239;

Odgovor 2. Unošenje broja u varijablu tokom njenog opisa (početna inicijalizacija).

int x = 239;

5. Koje su karakteristike tipova podataka s pomičnim zarezom?

Tipovi podataka s pomičnim zarezom omogućavaju vam da predstavite vrijednosti iz skupa realnih brojeva. Na primjer:

8.35 -990.399 239.0.

C++ ima sljedeće osnovne tipove podataka s pomičnim zarezom: float, double, long double.

Varijabla tipa double zauzima 2 puta više prostora u memoriji računala nego varijabla tipa float.

Takođe, varijabla long dvostrukog tipa zauzima 2 puta više prostora u memoriji računara nego varijabla dvostrukog tipa.

6. Kako opisati varijablu koja uzima vrijednost s pomičnim zarezom?

Primjer opisa varijabli tipa float, double, long double:

float f; duplo d; dugačak dupli ld;

7. Kako napisati numeričke vrijednosti u varijablu s pomičnim zarezom?

Primjer unosa numeričkih podataka u varijable s pomičnim zarezom:

float f = -9928,45; // početna inicijalizacija duplo d; dugačak dupli ld; d = 0,445332; // operator dodjeljivanja ld = 3892923898239.030903; // operator dodjeljivanja

8. Kako pretvoriti float varijablu u int tip?

Da biste to učinili, koristi se operacija lijevanja tipa. U zagradama trebate navesti naziv tipa na koji se cast pretvara.

float a; int b; a = 8,457; b = (int ) a; // b = 8

Kada koristite operacije prelivanja tipova, morate uzeti u obzir ograničenja koja se odnose na tipove koji zauzimaju manje prostora u memoriji računara.

Na primjer, varijabla tipa short int može predstavljati manji raspon brojeva od varijabli tipa float ili double. Sljedeća lista prebacuje vrijednost u varijabli tipa short int:

kratki int i; float f; f = 3990099,8; i = (int )f; // i = -7597 - prelijevanje

9. Kako pretvoriti varijablu iz tipa int u tip double?

Primjer lijevanja iz int u double:

int i; duplo d; i = 982; d = (dvostruko)i; // d = 982,0

10. Koje su karakteristike korištenja char podataka (podataka o znakovima) u programu?

Podaci tipa char predstavljaju vrijednost znakova koda unesenog s tastature. Šifra simbola je cijeli broj.

Na primjer, kod za znak 'f' je 102.

Fragment koda koji izračunava kod karaktera:

int kod; char simbol; simbol = "f" ; kod = (int )simbol; // kod = 102

Podaci tipa char su isti cijeli brojevi. Podaci tipa char zauzimaju 1 bajt u memoriji računara.

Odnos karakter-kod nalazi se u tablici Windows simbola. Znakovi sa kodovima od 0 do 127 su rezervisani BIOS znakovi. Oni uključuju najčešće korištene simbole, numeričke simbole i latinične simbole. Ovi znakovi se ne mogu mijenjati.

Znakovi sa kodovima od 128 do 255 su regionalni znakovi koji su vezani za određenu abecedu računara na kojem je instaliran operativni sistem Windows.

11. Koje su karakteristike korištenja tipa podataka bool (logički tip)?

Varijable tipa bool mogu uzeti samo dvije vrijednosti:

istina - istina,

lažno - lažno.

Ove varijable se koriste za testiranje Bulovih izraza. Numerička vrijednost true je 1. Numerička vrijednost false je 0.

Isječak koda koji definira numeričke vrijednosti true i false:

int rezultat; bool b; rezultat = (int)true; // rezultat = 1 b = netačno; rezultat = (int )b; // rezultat = 0

Isječak koda koji pretvara tipove int i float u bool:

int i; float f; bool b; i = 6; b = (bool )i; // b = Tačno f = 0,0; b = (bool )f; // b = Netačno

12. Kako odrediti veličinu memorije koju zauzima varijabla datog tipa?

Za ovo se koristi operacija sizeof().

Isječak koda koji definira veličinu nekih tipova podataka:

int d; d = sizeof(char); // d = 1 d = sizeof(unsigned int); // d = 4 d = sizeof(float); // d = 4 d = sizeof(double); // d = 8

13. Kako se varijable različitih tipova inicijaliziraju?

int d = 28; float z = (float )2,85; char c = "k" ; String ^s = "Zdravo!" ; duplo r = -8,559;

14. Kako odrediti maksimalnu dozvoljenu (minimalno dozvoljenu) vrijednost varijable određenog tipa?

Za određivanje maksimalne ili minimalne vrijednosti za varijablu određenog tipa, biblioteka .NET Framework koristi svojstva MaxValue i MinValue.

Primjeri određivanja graničnih vrijednosti varijabli različitih tipova.

Za varijable tipa int:

// ukucaj int int i; long MaxInt; long MinInt; MaxInt = (dugo )i.MaxValue; // MaxInt = 2147483647 MinInt = (dugo )i.MinValue; // MinInt = -2147483648

Za varijable tipa short int:

// upišite kratki int kratki int si; int MaxInt; int MinInt; MaxInt = (int )si.MaxValue; // MaxInt = 32767 MinInt = (int )si.MinValue; // MinInt = -32768

Za varijable tipa unsigned int :

// ukucaj unsigned int unsigned int ui; unsigned int MaxInt; unsigned int MinInt; MaxInt = ui.MaxValue; // MaxInt = 4294967295 MinInt = ui.MinValue; // MinInt = 0

Za varijable float:

// plutajući tip float f; float MaxF; float MinF; MaxF = f.MaxValue; // MaxF = 3,402823E+38 MinF = f.MinValue; // MinF = -3,402823E+38

Za varijable tipa double:

// upišite double duplo d; double MaxD; dupli MinD; Max = d.MaxValue; // Max = 1,79769313486232E+308 Min = d.MinValue; // Min = -1,79769313486232E+308

Za varijable tipa char:

// ukucaj char char c; int MaxC; int MinC; Max = (int )c.MaxValue; // Max = 127 Min = (int )c.MinValue; // Min = -128

15. Koje su karakteristike korištenja tipa enum?

Tip nabrajanja je tip podataka nabrajanja. Određuje mnemoničke vrijednosti za skupove cjelobrojnih vrijednosti. Svaka mnemonička vrijednost ima specifičan sadržaj i predstavljena je cijelim brojem.

Primjer korištenja tipa enum za predstavljanje mjeseci u godini:

enum mjeseci (januar, februar, mart, april, maj, jun, jul, avgust, septembar, oktobar, novembar, decembar) mn; mn = januar; // mn = 0 mn = mart; // mn = 2 mn = septembar; // mn = 8

Primjer ispod opisuje varijablu pod nazivom mn tipa enum months. Mnemoničke vrijednosti za mjesece (januar, februar, …) počinju od 0 (0, 1, 2, …). Januarska mnemonika je cjelobrojna vrijednost 0, februarska mnemonika je cijeli broj 1, i tako dalje.

Dakle, koristeći tip enuma, mnemonika se može koristiti u tekstu programa radi bolje jasnoće izvornog koda.

Možete to napisati i ovako:

mn = (nabroj mjeseci)2; // mn = mart mn = (nabroj mjeseci)11; // mn = decembar

16. Koje su karakteristike tipavoid u programima uključenimC++ ?

Void tip podataka se koristi u sljedećim slučajevima:

  • ako trebate opisati funkciju koja ne vraća nikakvu vrijednost (pogledajte primjer);
  • ako trebate opisati funkciju koja ne prima parametre (pogledajte primjer).

Primjer. MyFun() je funkcija bez parametara koja ne vraća nikakvu vrijednost (vraća tip void ) i ne uzima nikakve parametre.

javno : void MyFun(void) { // tijelo funkcije // ... povratak; // povratak iz funkcije koja ne vraća vrijednost } // pozivanje funkcije iz programa ... MyFun(); ...

17. Da li je moguće deklarirati varijablu tipavoid u programu?

Ovo nije moguće jer tip void nije povezan s vrijednošću.

Deklariranje varijable tipa void rezultira greškom kompilacije sa sljedećom porukom:

"Nezakonita upotreba tipa void"

18. Koje su karakteristike tipawchar_ t VVisual C++ ?

Varijable tipa char (pogledajte prethodne paragrafe) se koriste za pohranjivanje 8-bitnih ASCII znakova.

Tip wchar_t se koristi za pohranjivanje znakova koji su dio velikih skupova znakova. Na primjer, kineska abeceda ima ogroman broj znakova. 8 cifara nije dovoljno za predstavljanje cijelog skupa kineskih znakova. Stoga, ako trebate koristiti program na međunarodnom tržištu, preporučljivo je zamijeniti tip char s wchar_t.

Primjer koristeći tip wchar_t.

... wchar_t t; // 2 bajta memorije su dodijeljena za varijablu t t = "s"; ...

Cjelobrojni tip char zauzima 1 bajt (8 bitova) u memoriji i omogućava vam da izrazite 2^8 vrijednosti = 256 u binarnom obliku. Tip char može sadržavati i pozitivne i negativne vrijednosti. Raspon vrijednosti je od -128 do 127.

uchar

Integer tip uchar također zauzima 1 bajt u memoriji, kao i tip char, ali za razliku od njega, uchar je namijenjen samo za pozitivne vrijednosti. Minimalna vrijednost je nula, a maksimalna vrijednost je 255. Prvo u u nazivu tipa uchar je skraćenica za unsigned.

kratko

Cjelobrojni kratki tip ima veličinu od 2 bajta (16 bita) i, shodno tome, omogućava vam da izrazite skup vrijednosti ​​jednakih 2 na stepen od 16: 2^16 = 65,536. Pošto je kratki tip potpisan i sadrži pozitivne i negativne vrijednosti, vrijednosti raspona su između -32,768 i 32,767.

ushort

Nepotpisani kratki tip je ushort, koji je također veličine 2 bajta. Minimalna vrijednost je 0, maksimalna vrijednost je 65,535.

int

Celobrojni tip int je veličine 4 bajta (32 bita). Minimalna vrijednost je -2,147,483,648, maksimalna vrijednost je 2,147,483,647.

uint

Neoznačeni integer tip uint zauzima 4 bajta memorije i omogućava vam da izrazite cjelobrojne vrijednosti od 0 do 4,294,967,295.

dugo

Celobrojni tip long je veličine 8 bajtova (64 bita). Minimalna vrijednost je -9,223,372,036,854,775,808, maksimalna vrijednost je 9,223,372,036,854,775,807.

ulong

Ulong integer tip također zauzima 8 bajtova i može pohraniti vrijednosti od 0 do 18,446,744,073,709,551,615.

primjeri:

char ch= 12 ;
kratki sh=- 5000 ;
int in= 2445777 ;

Budući da tipovi cijelih brojeva bez predznaka nisu dizajnirani za pohranjivanje negativnih vrijednosti, pokušaj postavljanja negativne vrijednosti može imati neočekivane posljedice. Ovakav nevini skript će dovesti do beskonačne petlje:

Ispravan način bi bio:

rezultat:

Ch= -128 u_ch= 128
ch= -127 u_ch= 129
ch= -126 u_ch= 130
ch= -125 u_ch= 131
ch= -124 u_ch= 132
ch= -123 u_ch= 133
ch= -122 u_ch= 134
ch= -121 u_ch= 135
ch= -120 u_ch= 136
ch= -119 u_ch= 137
ch= -118 u_ch= 138
ch= -117 u_ch= 139
ch= -116 u_ch= 140
ch= -115 u_ch= 141
ch= -114 u_ch= 142
ch= -113 u_ch= 143
ch= -112 u_ch= 144
ch= -111 u_ch= 145
...

Tipovi podataka

Tipovi podataka su posebno važni u C# jer je to jezik sa jakom tipizacijom. To znači da sve operacije podliježu striktnoj provjeri tipa od strane kompajlera, a ilegalne operacije se ne kompajliraju. Shodno tome, stroga provera tipa eliminiše greške i povećava pouzdanost programa. Da bi se nametnula provjera tipa, sve varijable, izrazi i vrijednosti moraju biti određenog tipa. U ovom programskom jeziku uopće ne postoji takva stvar kao što je varijabla bez tipa. Štaviše, tip vrijednosti određuje operacije koje se mogu izvršiti na njoj. Operacija koja je legalna za jedan tip podataka možda neće biti važeća za drugi.

Postoje dvije opšte kategorije ugrađenih tipova podataka u C#: vrste vrijednosti I referentni tipovi. Razlikuju se po sadržaju varijable. Konceptualno, razlika između njih je u tome što tip vrijednosti direktno pohranjuje podatke, dok referentni tip pohranjuje referencu na vrijednost.

Ovi tipovi su pohranjeni na različitim lokacijama u memoriji: tipovi vrijednosti su pohranjeni u području poznatom kao stek, a referentni tipovi su pohranjeni u području poznatom kao upravljana hrpa.

Hajde da pogledamo vrste vrijednosti.

Cjelobrojni tipovi

C# definira devet cjelobrojnih tipova: char, byte, sbyte, short, ushort, int, uint, long i ulong. Ali tip char se prvenstveno koristi za predstavljanje znakova i stoga se tretira zasebno. Preostalih osam tipova cijelih brojeva su za numeričke proračune. Ispod je njihov raspon brojeva i dubine bita:

C# Tipovi cijelih brojeva
Tip Tip CTS Veličina bita Domet
bajt System.Byte 8 0:255
sbyte System.SByte 8 -128:127
kratko System.Int16 16 -32768: 32767
ushort System.UInt16 16 0: 65535
int System.Int32 32 -2147483648: 2147483647
uint System.UInt32 32 0: 4294967295
dugo System.Int64 64 -9223372036854775808: 9223372036854775807
ulong System.UInt64 64 0: 18446744073709551615

Kao što gornja tabela pokazuje, C# definira i varijante s predznakom i bez predznaka različitih tipova cijelih brojeva. Predpisani tipovi cijelih brojeva razlikuju se od svojih neoznačenih parnjaka po načinu na koji tumače najznačajniji bit cijelog broja. Dakle, ako program specificira predpisanu vrijednost cijelog broja, C# kompajler će generirati kod koji koristi najznačajniji bit cijelog broja kao oznaku predznaka. Broj se smatra pozitivnim ako je predznaka 0, a negativnim ako je 1.

Negativni brojevi su skoro uvek predstavljeni metodom komplementa dva, pri čemu se sve binarne cifre negativnog broja prvo invertuju, a zatim se tom broju dodaje 1.

Vjerojatno najčešći cjelobrojni tip u programiranju je int tip. Varijable tipa int se često koriste za kontrolu petlje, indeksiranje niza i matematička izračunavanja opće namjene. Kada vam je potrebna cjelobrojna vrijednost s većim rasponom reprezentacija od tipa int, postoji niz drugih cjelobrojnih tipova dostupnih za ovu svrhu.

Dakle, ako vrijednost treba biti pohranjena bez znaka, onda za nju možete odabrati uint tip, za velike vrijednosti predznaka - dugačak tip, a za velike neoznačene vrijednosti - tip ulong. Kao primjer, ispod je program koji izračunava udaljenost od Zemlje do Sunca u centimetrima. Za pohranjivanje tako velike vrijednosti, koristi se long varijabla:

Korišćenje sistema; koristeći System.Collections.Generic; koristeći System.Linq; koristeći System.Text; imenski prostor ConsoleApplication1 ( klasa Program ( statički void Main(string args) (dugi rezultat; const dugačak km = 149800000; // udaljenost u km. rezultat = km * 1000 * 100; Console.WriteLine(rezultat); Console.ReadLine(); ) ) )

Svim cjelobrojnim varijablama mogu se dodijeliti vrijednosti u decimalnim ili heksadecimalnim zapisima. U potonjem slučaju, potreban je prefiks 0x:

Dugi x = 0x12ab;

Ako postoji bilo kakva nesigurnost da li je cjelobrojna vrijednost tipa int, uint, long ili ulong, tada default int je prihvaćen. Da biste eksplicitno specificirali koji drugi cjelobrojni tip vrijednost treba imati, sljedeći znakovi se mogu dodati broju:

Uint ui = 1234U; dužina l = 1234L; ulong ul = 1234UL;

U i L se takođe mogu pisati malim slovima, iako se mala slova L lako mogu vizuelno pomešati sa brojem 1 (jedan).

Tipovi s pomičnim zarezom

Tipovi s pomičnim zarezom omogućavaju vam predstavljanje brojeva s razlomkom. Postoje dvije vrste tipova podataka s pomičnim zarezom u C#: float I duplo. Oni predstavljaju numeričke vrijednosti jednostruke i dvostruke preciznosti. Dakle, širina tipa float iznosi 32 bita, što približno odgovara rasponu predstavljanja brojeva od 5E-45 do 3.4E+38. A širina tipa double je 64 bita, što približno odgovara rasponu predstavljanja brojeva od 5E-324 do 1.7E+308.

Tip podataka float namijenjen je manjim vrijednostima s pomičnim zarezom koje zahtijevaju manju preciznost. Dvostruki tip podataka je veći od float i nudi viši stepen preciznosti (15 bita).

Ako je vrijednost koja nije cijeli broj tvrdo kodirana u izvornom kodu (na primjer, 12.3), onda kompajler obično pretpostavlja da je namijenjena dvostruka vrijednost. Ako vrijednost treba biti specificirana kao float, morat ćete joj dodati znak F (ili f):

Float f = 12.3F;

Decimalni tip podataka

Decimalni tip je također predviđen za predstavljanje visoko preciznih brojeva s pomičnim zarezom. decimalni, koji je namijenjen za korištenje u finansijskim proračunima. Ovaj tip ima širinu od 128 bita za predstavljanje numeričkih vrijednosti u rasponu od 1E-28 do 7.9E+28. Vjerovatno ste svjesni da je obična aritmetika s pomičnim zarezom sklona greškama zaokruživanja decimalnih brojeva. Ove greške se eliminišu korišćenjem decimalnog tipa, koji omogućava da brojevi budu predstavljeni na 28 (a ponekad i 29) decimalnih mesta. Budući da ovaj tip podataka može predstavljati decimalne vrijednosti bez grešaka zaokruživanja, posebno je koristan za proračune povezane s financijama:

Korišćenje sistema; koristeći System.Collections.Generic; koristeći System.Linq; koristeći System.Text; imenski prostor ConsoleApplication1 ( klasa Program ( static void Main(string args) ( // *** Obračun troška investicije sa *** // *** fiksnom stopom povrata*** decimalni novac, procenat; int i; const byte godina = 15 ; novac = 1000.0m; procenat = 0.045m; za (i = 1; i

Rezultat ovog programa će biti:

Simboli

U C#, znakovi nisu predstavljeni u 8-bitnom kodu, kao u mnogim drugim programskim jezicima kao što je C++, već u 16-bitnom kodu, tzv. Unicode. Unicodeov skup znakova je toliko širok da pokriva znakove iz gotovo svakog prirodnog jezika na svijetu. Dok mnogi prirodni jezici, uključujući engleski, francuski i njemački, imaju relativno mala pisma, neki drugi jezici, kao što je kineski, koriste prilično velike skupove znakova koji se ne mogu predstaviti u 8-bitnom kodu. Da bi se prevazišlo ovo ograničenje, C# definira tip char, koji predstavlja neoznačene 16-bitne vrijednosti u rasponu od 0 do 65 535. Međutim, standardni 8-bitni ASCII skup znakova je podskup Unicodea u rasponu od 0 do 127. Stoga su ASCII znakovi i dalje važeći u C#.

Posljednje ažuriranje: 17.09.2017

Svaka varijabla ima specifičan tip. A ovaj tip određuje koje vrijednosti varijabla može imati, koje operacije se mogu izvršiti na njoj i koliko će bajtova u memoriji zauzeti. Sljedeći osnovni tipovi podataka definirani su u jeziku C++:

    bool : logički tip. Može uzeti jednu od dvije vrijednosti: true i false. Memorijski otisak za ovaj tip nije precizno definiran.

    char : Predstavlja jedan ASCII znak. Zauzima 1 bajt (8 bitova) u memoriji. Može pohraniti bilo koju vrijednost od -128 do 127 ili od 0 do 255

    signed char : Predstavlja jedan znak. Zauzima 1 bajt (8 bitova) u memoriji. Može pohraniti bilo koju vrijednost od -128 do 127

    unsigned char : Predstavlja jedan znak. Zauzima 1 bajt (8 bitova) u memoriji. Može pohraniti bilo koju vrijednost od 0 do 255

    wchar_t : Predstavlja široki karakter. Na Windows-u zauzima 2 bajta (16 bita) memorije, na Linux-u 4 bajta (32 bita). Može pohraniti bilo koju vrijednost u rasponu od 0 do 65,535 (za 2 bajta) ili od 0 do 4,294,967,295 (za 4 bajta)

    char16_t : Predstavlja jedan Unicode znak. Zauzima 2 bajta (16 bita) u memoriji. Može pohraniti bilo koju vrijednost od 0 do 65,535

    char32_t : Predstavlja jedan Unicode znak. Zauzima 4 bajta (32 bita) u memoriji. Može pohraniti bilo koju vrijednost od 0 do 4,294,967,295

    kratki : Predstavlja cijeli broj u rasponu od –32768 do 32767. Zauzima 2 bajta (16 bita) memorije.

    Ovaj tip također ima sinonime short int, signed short int, signed short.

    unsigned short: Predstavlja cijeli broj u rasponu od 0 do 65535. Zauzima 2 bajta (16 bita) memorije.

    Ovaj tip također ima sinonim unsigned short int.

    int: predstavlja cijeli broj. Ovisno o arhitekturi procesora, može zauzeti 2 bajta (16 bita) ili 4 bajta (32 bita). Raspon graničnih vrijednosti prema tome također može varirati od –32768 do 32767 (sa 2 bajta) ili od −2,147,483,648 do 2,147,483,647 (sa 4 bajta). Ali u svakom slučaju, veličina mora biti veća ili jednaka veličini kratkog tipa i manja ili jednaka veličini dugog tipa

    Ovaj tip ima sinonime signed int i signed .

    unsigned int : Predstavlja pozitivan cijeli broj. Ovisno o arhitekturi procesora, može zauzeti 2 bajta (16 bita) ili 4 bajta (32 bita), te zbog toga raspon graničnih vrijednosti može varirati: od 0 do 65535 (za 2 bajta) ili od 0 do 4,294,967,295 (za 4 bajta).

    unsigned se može koristiti kao sinonim za ovaj tip

    long : Predstavlja cijeli broj u rasponu od -2,147,483,648 do 2,147,483,647. Zauzima 4 bajta (32 bita) memorije.

    Ovaj tip također ima sinonime long int , signed long int i signed long

    unsigned long: Predstavlja cijeli broj u rasponu od 0 do 4,294,967,295. Zauzima 4 bajta (32 bita) memorije.

    Ima sinonim unsigned long int .

    long long: Predstavlja cijeli broj u rasponu od −9,223,372,036,854,775,808 do +9,223,372,036,854,775,807. Zauzima tipično 8 bajtova (64 bita) memorije.

    Ima sinonime long long int , signed long long int i signed long long .

    unsigned long long : Predstavlja cijeli broj u rasponu od 0 do 18,446,744,073,709,551,615. Obično zauzima 8 bajtova (64 bita) memorije.

    Ima sinonim unsigned long long int .

    float : Predstavlja realni broj s pomičnim zarezom jedne preciznosti u rasponu +/- 3,4E-38 do 3,4E+38. Zauzima 4 bajta (32 bita) u memoriji

    double : Predstavlja realni broj s pomičnim zarezom dvostruke preciznosti u rasponu +/- 1.7E-308 do 1.7E+308. Zauzima 8 bajtova (64 bita) u memoriji

    long double : Predstavlja stvarni broj s pomičnim zarezom dvostruke preciznosti od najmanje 8 bajtova (64 bita). Ovisno o veličini zauzete memorije, raspon važećih vrijednosti može varirati.

    void : tip bez vrijednosti

Dakle, svi tipovi podataka osim void mogu se podijeliti u tri grupe: znakovni (char, wchar_t, char16_t, char32_t), integer (short, int, long, long long) i tipovi brojeva s pomičnim zarezom (float, double, long double).

Tipovi znakova

Tipovi koji se koriste za predstavljanje znakova u aplikaciji su char, wchar_t, char16_t i char32_t.

Definirajmo nekoliko varijabli:

Char c="d"; wchar_t d="c";

Varijabla char uzima kao vrijednost jedan znak u jednostrukim navodnicima: char c ="d" . Također možete dodijeliti broj iz gore navedenog raspona na listi: char c = 120 . U ovom slučaju, vrijednost varijable c će biti znak koji ima kod 120 u ASCII tablici znakova.

Vrijedi uzeti u obzir da za izlaz wchar_t znakova na konzolu ne biste trebali koristiti std::cout, već std::wcout stream:

#include int main() ( char a = "H"; wchar_t b = "e"; std::wcout<< a << b << "\n"; return 0; }

U ovom slučaju, std::wcout stream može raditi i sa char i wchar_t. A std::cout stream za wchar_t varijablu će ispisati svoj numerički kod umjesto karaktera.

C++11 standard je dodao tipove char16_t i char32_t, koji su orijentirani na korištenje Unicode-a. Međutim, niti za rad sa ovim tipovima još nisu implementirane na nivou OS-a. Stoga, ako trebate prikazati vrijednosti varijabli ovih tipova na konzoli, trebate pretvoriti varijable u tipove char ili wchar_t:

#include int main() ( char a = "H"; wchar_t b = "e"; char16_t c = "l"; char32_t d = "o"; std::cout<< a << (char)b << (char)c << (char)d << "\n"; return 0; }

U ovom slučaju, prilikom izlaza, varijablama prethodi operacija cast na tip char - (char) , zbog čega se vrijednosti varijabli b, c i d pretvaraju u tip char i mogu se ispisati u konzolu koristeći std::cout stream.

Cjelobrojni tipovi

Cjelobrojni tipovi su predstavljeni sljedećim tipovima: short, unsigned short, int, unsigned int, long, unsigned long, long long i unsigned long long:

Kratki a = -10; neoznačeno kratko b= 10; int c = -30; unsigned int d = 60; dugačak e = -170; unsigned long f = 45; dugo duga g = 89;

Vrste brojeva s pomičnim zarezom

Tipovi brojeva s pomičnim zarezom i razlomcima predstavljeni su s plutajućim, dvostrukim i dugim dvostrukim:

Float a = -10,45; duplo b = 0,00105; dugi dupli c = 30,890045;

Veličina tipova podataka

Gornja lista prikazuje za svaki tip veličinu koju zauzima u memoriji. Međutim, vrijedno je napomenuti da programeri kompajlera mogu odabrati ograničenja veličine za tipove nezavisno, na osnovu hardverskih mogućnosti računara. Standard postavlja samo minimalne vrijednosti koje bi trebale biti. Na primjer, za tipove int i short minimalna vrijednost je 16 bita, za tip long - 32 bita, za tip long double. U ovom slučaju, veličina tipa long ne smije biti manja od veličine tipa int, a veličina tipa int ne smije biti manja od veličine kratkog tipa, a veličina tipa long double mora biti veći od duplo. Na primjer, g++ kompajler za Windows koristi 12 bajtova za duge duple vrijednosti, a kompajler ugrađen u Visual Studio i također radi pod Windowsom koristi 8 bajtova za duga dvostruka. To jest, čak i unutar iste platforme, različiti prevodioci mogu imati različite pristupe veličinama određenih tipova podataka. Ali općenito se koriste veličine koje su gore navedene pri opisivanju tipova podataka.

Međutim, postoje situacije kada je potrebno točno znati veličinu određene vrste. A za ovo, C++ ima operator sizeof() koji vraća veličinu memorije u bajtovima koje varijabla zauzima:

#include int main() (dugi dvostruki broj = 2; std::cout<< "sizeof(number) =" << sizeof(number); return 0; }

Izlaz konzole prilikom kompajliranja u g++:

sizeof(broj) = 12

U isto vrijeme, prilikom definiranja varijabli, važno je razumjeti da vrijednost varijable ne bi trebala prelaziti granice navedene za njen tip. Na primjer:

Nepotpisani kratki broj = -65535;

G++ kompajler, kada kompajlira program sa ovom linijom, generirat će grešku u kojoj se navodi da vrijednost -65535 nije unutar raspona važećih vrijednosti za nepotpisani kratki tip i bit će skraćena.

U Visual Studio-u, kompilacija može da se nastavi bez grešaka, ali promenljiva broj će dobiti vrednost 2 - rezultat pretvaranja broja -65535 u nepotpisani kratki tip. Odnosno, opet, rezultat neće biti baš onakav kakav se očekuje. Vrijednost varijable je samo zbirka bitova u memoriji koji se interpretiraju prema određenom tipu. A za različite tipove, isti skup bitova se može različito tumačiti. Stoga je važno uzeti u obzir raspon vrijednosti za dati tip kada se dodjeljuje vrijednost varijabli.

auto specificer

Ponekad može biti teško odrediti vrstu izražavanja. A prema najnovijim standardima, možete dozvoliti kompajleru da zaključi tip samog objekta. Za to se koristi auto specificer. Štaviše, ako definiramo varijablu sa auto specificatorom, ova varijabla mora biti inicijalizirana nekom vrijednošću:

Automatski broj = 5;

Na osnovu dodijeljene vrijednosti, kompajler će zaključiti tip varijable. Neinicijalizirane varijable sa auto specificatorom nisu dozvoljene.



Ako pronađete grešku, odaberite dio teksta i pritisnite Ctrl+Enter.