Planinarenje Transport Ekonomične peći

Koliko int drži? Tipovi podataka i varijable. Cjelobrojni prefiksi tipa podataka

U ovom odeljku će se raspravljati o glavnim tipovima podataka u C++-u. Programski jezik C++ je proširivi programski jezik. Termin proširivi znači da pored ugrađenih tipova podataka, možete kreirati vlastite tipove podataka. Zato postoji ogroman broj tipova podataka u C++. Proučavaćemo samo glavne.

Tabela 1 - C++ tipovi podataka
Tip bajt Raspon prihvaćenih vrijednosti

integer (Boolean) tip podataka

bool 1 0 / 255

cjelobrojni (znakovni) tip podataka

char 1 0 / 255

cjelobrojni tipovi podataka

kratki int 2 -32 768 / 32 767
nepotpisan kratki int 2 0 / 65 535
int 4
unsigned int 4 0 / 4 294 967 295
long int 4 -2 147 483 648 / 2 147 483 647
unsigned long int 4 0 / 4 294 967 295

tipovi podataka s pomičnim zarezom

float 4 -2 147 483 648.0 / 2 147 483 647.0
long float 8
duplo 8 -9 223 372 036 854 775 808 .0 / 9 223 372 036 854 775 807.0

Tabela 1 prikazuje glavne tipove podataka u C++. Cela tabela je podeljena u tri kolone. Prva kolona označava rezerviranu riječ, koja će odrediti, svaki svoj, tip podataka. Druga kolona označava broj bajtova dodijeljenih za varijablu s odgovarajućim tipom podataka. Treća kolona pokazuje raspon prihvatljivih vrijednosti. Imajte na umu da su u tabeli svi tipovi podataka raspoređeni od najmanjeg do najvećeg.

bool tip podataka

Prvi u tabeli je tip podataka bool cjelobrojni tip podataka, budući da je raspon važećih vrijednosti cijeli brojevi od 0 do 255. Ali kao što ste već primijetili, u zagradi piše logički tip podataka, a to je također tačno. Jer bool koristi se isključivo za pohranjivanje rezultata Booleovih izraza. Boolean izraz može imati jedan od dva rezultata: istinit ili netačan. true - ako je logički izraz tačan, false - ako je logički izraz netačan.

Ali pošto je raspon valjanih vrijednosti tipa podataka bool od 0 do 255, bilo je potrebno nekako uskladiti ovaj raspon sa logičkim konstantama true i false definiranim u programskom jeziku. Dakle, konstanta true je ekvivalentna svim brojevima od 1 do 255 uključujući, dok je konstanta false ekvivalentna samo jednom cijelom broju - 0. Zamislite program koji koristi tip podataka bool.

// data_type.cpp: Definira ulaznu točku za aplikaciju konzole. #include "stdafx.h" #include korištenje imenskog prostora std; int main(int argc, char* argv) ( bool boolean = 25; // varijabla tipa bool nazvana boolean if (boolean) // uslov if cout operatora<< "true = " << boolean << endl; // выполнится в случае истинности условия else cout << "false = " << boolean << endl; // выполнится в случае, если условие ложно system("pause"); return 0; }

IN red 9deklarisana varijabla tipa bool , koji je inicijaliziran na 25. Teoretski, nakonlinije 9, u logičkoj varijabli treba da sadrži broj 25, ali u stvari ova varijabla sadrži broj 1. Kao što sam rekao, broj 0 je lažna vrijednost, broj 1 je tačna vrijednost. Poenta je da u varijabli kao što je bool može sadržavati dvije vrijednosti - 0 (netačno) ili 1 (tačno). Dok pod tipom podataka bool dodjeljuje se cijeli bajt, što znači da je varijabla tipa bool može sadržavati brojeve od 0 do 255. Za određivanje lažne i istinite vrijednosti potrebne su samo dvije vrijednosti 0 i 1 Postavlja se pitanje: "Za šta služe ostale 253 vrijednosti?"

Na osnovu ove situacije dogovorili smo se da se brojevi od 2 do 255 koriste kao ekvivalent broju 1, odnosno istini. Upravo zbog toga logička varijabla sadrži broj 25, a ne 1. In redovi 10 -13 deklarirano, čime se kontrola prenosi na operatera u red 11, ako je uslov tačan, a operator in red 13, ako je uslov netačan. Rezultat programa je prikazan na slici 1.

Tačno = 1 Za nastavak pritisnite bilo koji taster. . .

Slika 1 - bool tip podataka

Tip podataka char

Tip podataka char je cjelobrojni tip podataka koji se koristi za predstavljanje znakova. To jest, svaki znak odgovara određenom broju iz raspona. Tip podataka char se također naziva tipom podataka znakova, budući da je grafički prikaz znakova u C++ moguć zahvaljujući char. Za predstavljanje znakova u C++, tipu podataka char dodjeljuje se jedan bajt, jedan bajt sadrži 8 bitova, zatim podižemo dva na stepen 8 i dobijamo vrijednost 256 - broj znakova koji se mogu kodirati. Dakle, koristeći tip podataka char, možete prikazati bilo koji od 256 znakova. Svi kodirani znakovi su predstavljeni u .

ASCII (od engleskog Standard Code for Information Interchange) - američki standardni kod za razmjenu informacija.

Razmislite o programu koji koristi tip podataka char.

// symbols.cpp: Definira ulaznu točku za aplikaciju konzole. #include "stdafx.h" #include korištenje imenskog prostora std; int main(int argc, char* argv) ( char simbol = "a"; // deklarisanje varijable tipa char i inicijalizacija sa simbolom "a" cout<< "symbol = " << symbol << endl; // печать символа, содержащегося в переменной symbol char string = "сайт"; // объявление символьного массива (строки) cout << "string = " << string << endl; // печать строки system("pause"); return 0; }

Dakle, unutra red 9varijabla pod nazivom simbol , dodjeljuje mu se vrijednost simbola"a" ( ASCII kod). IN red 10 cout operator ispisuje znak sadržan u varijabli simbol IN red 11deklarisao niz nizova sa imenom string , a veličina niza je navedena implicitno. String je pohranjen u nizu nizova"web stranica" . Imajte na umu da kada smo sačuvali simbol u varijablu kao što je char , zatim iza znaka jednakosti stavljamo pojedinačne navodnike u kojima smo napisali simbol. Prilikom inicijalizacije niza stringova određenim stringom, nakon znaka jednakosti stavljaju se dvostruki navodnici u koji je upisan određeni niz. Kao i obični karakter, nizovi se izlaze pomoću operatora cout , red 12. Rezultat programa je prikazan na slici 2.

Simbol = string = lokacija Za nastavak, pritisnite bilo koji taster. . .

Slika 2 - tip podataka char

Cjelobrojni tipovi podataka

Cjelobrojni tipovi podataka se koriste za predstavljanje brojeva. U tabeli 1 ih je šest: kratki int, nepotpisani kratki int, int, nepotpisani int, dugi int, nepotpisani dugi int . Svi imaju svoju veličinu memorije i raspon prihvaćenih vrijednosti. Ovisno o kompajleru, veličina zauzete memorije i raspon prihvaćenih vrijednosti mogu varirati. U tabeli 1, svi rasponi prihvaćenih vrijednosti i veličina zauzete memorije uzeti su za MVS2010 kompajler. Štaviše, svi tipovi podataka u tabeli 1 su raspoređeni u rastućem redosledu veličine zauzete memorije i opsega prihvaćenih vrednosti. Raspon prihvaćenih vrijednosti, na ovaj ili onaj način, ovisi o veličini zauzete memorije. Shodno tome, što je veća veličina zauzete memorije, veći je raspon prihvaćenih vrijednosti. Također, raspon prihvaćenih vrijednosti se mijenja ako je tip podataka deklariran s nepotpisanim prefiksom. Prefiks unsigned znači da tip podataka ne može pohraniti potpisane vrijednosti, tada se raspon pozitivnih vrijednosti udvostručuje, na primjer, tipovi podataka short int i unsigned short int.

Prefiksi cjelobrojnog tipa podataka:

kratko prefiks skraćuje tip podataka na koji se primjenjuje smanjenjem veličine memorije koju zauzima;

dugo prefiks proširuje tip podataka na koji se primjenjuje povećanjem veličine memorije koju zauzima;

neoznačeno—prefiks udvostručuje raspon pozitivnih vrijednosti, dok raspon negativnih vrijednosti ne može biti pohranjen u ovom tipu podataka.

Dakle, u suštini imamo jedan cjelobrojni tip za predstavljanje cijelih brojeva: tip podataka int. Zahvaljujući prefiksima kratki, dugi, neoznačeni, pojavljuje se određena raznolikost int tipova podataka, koji se razlikuju po veličini zauzete memorije i (ili) rasponu prihvaćenih vrijednosti.

Tipovi podataka s pomičnim zarezom

Postoje dvije vrste podataka s pomičnim zarezom u C++: float i double. Tipovi podataka s pomičnim zarezom dizajnirani su za pohranjivanje brojeva s pomičnim zarezom. Tipovi podataka float i double mogu pohraniti i pozitivne i negativne brojeve s pomičnim zarezom. Tip podataka float ima upola manji memorijski otisak od tipa double, što znači da je raspon prihvaćenih vrijednosti također manji. Ako je tip podataka float deklariran sa dugim prefiksom, tada će raspon prihvaćenih vrijednosti biti jednak rasponu prihvaćenih vrijednosti tipa double podataka. U osnovi, tipovi podataka s pomičnim zarezom su potrebni za rješavanje problema s visokom računskom preciznošću, kao što su transakcije novca.

Dakle, pogledali smo glavne tačke u vezi sa glavnim tipovima podataka u C++. Ostaje samo pokazati odakle dolaze svi ti rasponi prihvaćenih vrijednosti i veličina zauzete memorije. I za to ćemo razviti program koji će izračunati glavne karakteristike svih tipova podataka o kojima smo gore govorili.

// data_types.cpp: Definira ulaznu točku za aplikaciju konzole. #include "stdafx.h" #include // Biblioteka I/O manipulacije #include // datoteka zaglavlja matematičkih funkcija #include korištenje imenskog prostora std; int main(int argc, char* argv) ( cout<< " data type " << "byte" << " " << " max value "<< endl // zaglavlja stupaca <<"bool = " << sizeof(bool) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных bool*/ << (pow(2,sizeof(bool) * 8.0) - 1) << endl << "char = " << sizeof(char) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных char*/ << (pow(2,sizeof(char) * 8.0) - 1) << endl << "short int = " << sizeof(short int) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных short int*/ << (pow(2,sizeof(short int) * 8.0 - 1) - 1) << endl << "unsigned short int = " << sizeof(unsigned short int) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных unsigned short int*/ << (pow(2,sizeof(unsigned short int) * 8.0) - 1) << endl << "int = " << sizeof(int) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных int*/ << (pow(2,sizeof(int) * 8.0 - 1) - 1) << endl << "unsigned int = " << sizeof(unsigned int) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных unsigned int*/ << (pow(2,sizeof(unsigned int) * 8.0) - 1) << endl << "long int = " << sizeof(long int) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных long int*/ << (pow(2,sizeof(long int) * 8.0 - 1) - 1) << endl << "unsigned long int = " << sizeof(unsigned long int) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных undigned long int*/ << (pow(2,sizeof(unsigned long int) * 8.0) - 1) << endl << "float = " << sizeof(float) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных float*/ << (pow(2,sizeof(float) * 8.0 - 1) - 1) << endl << "double = " << sizeof(double) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных double*/ << (pow(2,sizeof(double) * 8.0 - 1) - 1) << endl; system("pause"); return 0; }

Ovaj program je objavljen tako da možete vidjeti karakteristike tipova podataka u vašem sistemu. Nema potrebe za razumijevanjem koda, jer program koristi kontrolne izraze s kojima najvjerovatnije još niste upoznati. Za površno upoznavanje s programskim kodom, objasnit ću neke točke u nastavku. Operater sizeof() Izračunava broj bajtova dodijeljenih za tip podataka ili varijablu. Funkcija pow(x,y) podiže značenje x na stepen y , ova funkcija je dostupna iz datoteke zaglavlja . fixed i setprecision() manipulatori dostupno iz datoteke zaglavlja . Prvi je fiksiran , prosljeđuje vrijednosti u fiksnom obliku u izlazni tok. Manipulator setprecision(n) prikazuje n decimalna mjesta. Maksimalna vrijednost određenog tipa podataka izračunava se pomoću sljedeće formule:

Max_val_type = 2^(b * 8 - 1) - 1; // za tipove podataka s negativnim i pozitivnim brojevima // gdje je b broj bajtova dodijeljenih u memoriji za varijablu s ovim tipom podataka // pomnožimo sa 8, jer u jednom bajtu ima 8 bitova // oduzmi 1 u zagradi, budući da se brojevi raspona moraju podijeliti na dva za pozitivne i negativne vrijednosti // oduzmite 1 na kraju, jer raspon brojeva počinje od nule // tipovi podataka s prefiksom unsigned max_val_type = 2^(b * 8) - 1; // za tipove podataka samo s pozitivnim brojevima // objašnjenja formule su slična, samo se jedinica ne oduzima od zagrade

Primjer kako program radi može se vidjeti na slici 3. Prva kolona prikazuje glavne tipove podataka u C++, druga kolona prikazuje veličinu memorije dodijeljene za svaki tip podataka, a treća kolona prikazuje maksimalnu vrijednost koja odgovara tip podataka može sadržavati. Minimalna vrijednost je slična maksimalnoj. Za tipove podataka sa prefiksom bez predznaka, minimalna vrijednost je 0.

Tip podataka bajt maks. vrijednost bool = 1 255,00 char = 1 255,00 short int = 2 32767,00 unsigned short int = 2 65535,00 int = 4 2147483647,00 unsigned int = 4 4294470 int = 4 4294670 int 0 unsigned long int = 4 4294967295.00 float = 4 2147483647.00 duplo = 8 9223372036854775808.00 Za nastavak pritisnite bilo koji taster. . .

Slika 3 - C++ tipovi podataka

Ako se, na primjer, varijabli tipa short int dodijeli vrijednost 33000, tada će se bitna mreža preliti, budući da je maksimalna vrijednost varijable tipa short int 32767. To jest, neka druga vrijednost će biti pohranjena u varijablu tipa short int, najvjerovatnije će biti negativan. Pošto smo se dotakli tipa podataka int, vrijedi napomenuti da možete izostaviti ključnu riječ int i napisati, na primjer, samo kratko . Prevodilac će protumačiti takav unos kao kratki int. Isto vrijedi i za duge i nepotpisane prefikse. Na primjer:

// skraćenica za tip podataka int short a1; // isto što i short int long a1; // isto kao long int unsigned a1; // isto kao unsigned int unsigned short a1; // isto kao nepotpisani kratki int

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 vam omogućava da izrazite skup vrijednosti jednakih 2 na stepen od 16: 2^16 = 65,536 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

Integer tipa 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
...

Posljednje ažuriranje: 17.09.2017

Svaka varijabla ima specifičan tip. I ovaj tip određuje koje vrijednosti varijabla može imati, koje operacije se na njoj mogu izvršiti 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 za 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 tipično zauzima 8 bajtova (64 bita).

    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 8 bajtova (64 bita) u memoriji.

    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 treba 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 tok 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 orijentisani 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 izvesti 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, će generisati grešku u kojoj se navodi da vrednost -65535 nije u opsegu važećih vrednosti za nepotpisani kratki tip i biće skraćena.

U Visual Studio-u, kompilacija se može nastaviti bez grešaka, ali varijabla broj će dobiti vrijednost 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. I 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.

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 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 je 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 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. Da bi pohranio tako veliku vrijednost, koristi dugu varijablu:

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(rezult); Console.ReadLine(); ) ) )

Svim cjelobrojnim varijablama mogu se dodijeliti vrijednosti u decimalnom ili heksadecimalnom zapisu. 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 godine = 15 m;

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 Unicode u rasponu od 0 do 127. Stoga su ASCII znakovi i dalje važeći u C#.

U programiranju, tip podataka je zbirka od dva skupa: skupa vrijednosti i skupa operacija koje se mogu primijeniti na njih. Na primjer, operacije sabiranja (+), množenja (*), dijeljenja cijelog broja (/), ostatka (%) i oduzimanja (−) mogu se primijeniti na nenegativni cjelobrojni tip podataka koji se sastoji od konačnog skupa prirodnih brojeva.

Programski jezik obično ima skup primitivnih tipova podataka—tipova koje programski jezik obezbeđuje kao osnovnu ugrađenu jedinicu. U C++, tvorac jezika takve tipove naziva fundamentalnim tipovima. Osnovni tipovi u C++-u su:

  • boolean(bool);
  • karakter (npr. char);
  • int (npr. int);
  • pomični zarez (npr. float);
  • enumeracije (definisane od strane programera);
  • void .

Povrh navedenih, izgrađeni su sljedeći tipovi:

  • demonstrativna (npr. int*);
  • nizovi (npr. char);
  • referenca (npr. dupli&);
  • druge strukture.

Pređimo na koncept literala (na primjer, 1, 2.4F, 25e-4, 'a', itd.): literal je unos u izvornom kodu programa koji predstavlja fiksnu vrijednost. Drugim riječima, literal je jednostavno reprezentacija objekta (vrijednosti) nekog tipa u programskom kodu. C++ ima mogućnost pisanja cijelih brojeva, vrijednosti s pomičnim zarezom, znakova, logičkih vrijednosti i nizova vrijednosti.

Literal cjelobrojnog tipa može se napisati kao:

  • 10. sistem brojeva. Na primjer, 1205 ;
  • 8. brojni sistem u formatu 0 + broj. Na primjer, 0142;
  • 16. brojevni sistem u formatu 0x + broj. Na primjer, 0x2F.

24, 030, 0x18 - sve su to zapisi istog broja u različitim brojevnim sistemima.
Za pisanje brojeva s pomičnim zarezom, koristite zapis tačaka: 0.1, .5, 4. - bilo u
eksponencijalna notacija - 25e-100. U takvom zapisu ne bi trebalo biti razmaka.

Ime s kojim možemo povezati vrijednosti napisane u literalima naziva se varijabla. Varijabla je imenovana ili na drugi način adresabilna oblast memorije čija se adresa može koristiti za pristup podacima. Ovi podaci se upisuju, prepisuju i brišu u memoriji na specifičan način tokom izvršavanja programa. Varijabla vam omogućava da pristupite podacima u bilo koje vrijeme i, ako je potrebno, promijenite ih. Podaci koji se mogu preuzeti iz imena varijable nazivaju se vrijednošću varijable.
Da bi se koristila varijabla u programu, ona mora biti deklarirana, a ako je potrebno, može se definirati (= inicijalizirati). Deklaracija varijable u tekstu programa nužno sadrži 2 dijela: osnovni tip i deklarator. Specifikator i inicijalizator su opcijski dijelovi:

Const int primjer = 3; // ovdje je const specifikacija // int je osnovni tip // primjer je ime varijable // = 3 - inicijalizator.

Ime varijable je niz znakova koji se sastoji od slova latinice (mala i velika slova), brojeva i/ili donje crte, ali prvi znak ne može biti broj. Ime varijable treba odabrati tako da je uvijek lako pogoditi šta pohranjuje, na primjer, “monthPayment”. U napomenama iu praksi koristićemo CamelCase notaciju za pravila za snimanje varijabli. Ime varijable ne može se podudarati s riječima rezerviranim u jeziku, primjeri takvih riječi su: if, while, function, goto, switch, itd.

Pored imena varijable, deklarator može sadržavati dodatne znakove:

  • * - pokazivač; ispred imena;
  • *const - konstantni pokazivač; ispred imena;
  • & - veza; ispred imena;
  • - niz; nakon imena;
  • () - funkcija; nakon imena.

Inicijalizator vam omogućava da definirate vrijednost za varijablu odmah nakon njene deklaracije. Inicijalizator počinje literalom jednakosti (=), a zatim nastavlja sa postavljanjem vrijednosti varijable. Uopšteno govoreći, znak jednakosti u C++ označava operaciju dodjeljivanja; uz njegovu pomoć možete postaviti i promijeniti vrijednost varijable. Može se razlikovati za različite tipove.

Specifikator specificira dodatne atribute osim tipa. Specifikator const dat u primjeru omogućava vam da zabranite naknadne promjene vrijednosti varijable. Takve nepromjenjive varijable se nazivaju konstantne ili konstantne.

Deklarisanje konstante bez inicijalizacije neće raditi iz logičnih razloga:

Const int EMPTY_CONST; // greška, konstantna varijabla nije inicijalizirana const int EXAMPLE = 2; // konstanta sa vrijednošću 2 PRIMJER = 3; // greška, pokušaj dodijeliti vrijednost konstantnoj varijabli

Prilikom imenovanja konstanti uobičajeno je koristiti samo velika slova, odvajajući riječi podvlakom.

Osnovni tipovi podataka u C++

Dok ispituje svaki tip, čitatelj ne bi trebao zaboraviti na definiciju tipa podataka.

1. Integer tip (char, short (int), int, long (int), long long)

Iz naziva je lako razumjeti da se skup vrijednosti sastoji od cijelih brojeva. Također, skup vrijednosti svakog od navedenih tipova može biti potpisan ili nepotpisan. Broj elemenata sadržanih u skupu ovisi o veličini memorije koja se koristi za pohranjivanje vrijednosti tog tipa. Na primjer, za varijablu tipa char se dodjeljuje 1 bajt memorije, tako da će ukupni elementi biti:

  • 2 8N = 2 8 * 1 = 256, gdje je N veličina memorije u bajtovima za pohranjivanje vrijednosti

U ovom slučaju, rasponi dostupnih cijelih brojeva su sljedeći:

  • - za nepotpisani znak
  • [-128..127] - za potpisani znak

Po defaultu, cjelobrojna varijabla se smatra potpisanom. Da bi se u kodu naznačilo da varijabla mora biti nepotpisana, osnovnom tipu s lijeve strane dodaje se signed atribut, tj. nepotpisano:

Duge vrijednosti bez predznaka; // specificira cjelobrojni (dugi) neoznačeni tip.

Navedene vrste razlikuju se samo po veličini memorije potrebne za skladištenje. Pošto je jezik C++ prilično zavisan od mašine, jezički standard garantuje samo sledeći uslov:

  • 1 = veličina znakova ≤ kratka veličina ≤ veličina int ≤ duga veličina.

Obično su veličine tipova sljedeće: char - 1, short - 2, int - 4, long -8, long long - 8 bajtova.

Možete izvoditi aritmetičke operacije sa vrijednostima cjelobrojnog tipa: +, -, *, /, %; operacije poređenja: ==, !=,<=, <, >, >=; bitne operacije: &, |, xor,<<, >>.
Većina operacija, kao što su sabiranje, množenje, oduzimanje i poređenje, lako je razumjeti. Ponekad, nakon izvođenja aritmetičkih operacija, rezultat može biti izvan raspona vrijednosti; u ovom slučaju program će generirati grešku.
Cjelobrojna podjela (/) pronalazi cijeli dio jednog cijelog broja podijeljen s drugim. Na primjer:

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

Simbol postotka (%) označava operaciju određivanja ostatka dijeljenja dva cijela broja:

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

Teže razumljive operacije su bitne operacije: & (AND), | (OR), xor (isključivo OR),<< (побитовый сдвиг влево), >> (bitni pomak udesno).

Bitne operacije AND, OR i XOR primjenjuju odgovarajuću logičku operaciju na svaki bit informacije:

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

U obradi slike koriste se 3 kanala za boju: crvena, plava i zelena - plus transparentnost, koji se pohranjuju u int varijablu, jer svaki kanal ima raspon vrijednosti od 0 do 255. U heksadecimalnom brojevnom sistemu, određena vrijednost je zapisana na sljedeći način: 0x180013FF; tada vrijednost 18 16 odgovara crvenom kanalu, 00 16 - plavom, 13 16 - zelenom, FF - alfa kanalu (transparentnost). Za odabir određenog kanala iz takvog cijelog broja koristi se tzv. kanal. maska, gdje su pozicije koje nas zanimaju F 16 ili 1 2. Odnosno, da biste istakli vrijednost plavog kanala, morate koristiti masku, tj. po bitovima I:

Int blue_channel = 0x180013FF & 0x00FF0000;

Nakon čega se rezultirajuća vrijednost pomiče udesno za potreban broj bitova.

Pomak bita pomiče broj lijevo ili desno za onoliko binarnih cifara koliko je navedeno na desnoj strani operacije. Na primjer, broj 39 za tip char je napisan u binarnom obliku na sljedeći način: 00100111. Zatim:

Char binaryExample = 39; // 00100111 char rezultat = binaryExample<< 2; // сдвигаем 2 бита влево, результат: 10011100

Ako je varijabla tipa bez predznaka, tada će rezultat biti broj 156, za predznaku jednak je -100. Imajte na umu da je za tipove cijelih brojeva s predznakom, jedinica u najznačajnijem bitu bitske reprezentacije znak da je broj negativan. U ovom slučaju, vrijednost u binarnom obliku koja se sastoji od svih jedinica odgovara -1; ako je 1 samo u najznačajnijoj cifri, a preostale cifre su nule, tada takav broj ima minimalnu vrijednost za određeni tip: za char je -128.

2. Tip s pomičnim zarezom (float, dupli (float))

Skup vrijednosti s pomičnim zarezom je podskup realnih brojeva, ali nije svaki realan broj binarno predstavljen, što ponekad dovodi do glupih grešaka:

Float vrijednost = 0,2; vrijednost == 0,2; // greška, vrijednost ovdje neće biti jednaka 0,2.

Kada se radi sa varijablama s pomičnim zarezom, programer ne bi trebao koristiti test jednakosti ili nejednakosti, obično se koristi test za upadanje u određeni interval:

Vrijednost - 0,2< 1e-6; // ok, подбирать интервал тоже нужно осторожно

Pored operacija poređenja, tip s pomičnim zarezom podržava 4 aritmetičke operacije koje u potpunosti odgovaraju matematičkim operacijama s realnim brojevima.

3. Boolean (logički) tip (bool)

Sastoji se od samo dvije vrijednosti: true (true) i false (false). Za rad sa varijablama ovog tipa koriste se logičke operacije: ! (NE), == (jednakost), != (nejednakost), && (logičko I), || (logičko ILI). Rezultat svake operacije može se naći u odgovarajućoj tabeli istinitosti. Na primjer:

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

4. Tip karaktera (char, wchar_t)

Tip char nije samo cjelobrojni tip (obično se ovaj tip naziva bajt), već i tip karaktera, koji pohranjuje broj karaktera iz tablice kao ASCII znak. Na primjer, kod 0x41 odgovara znaku 'A', a 0x71 - 't'.

Ponekad postoji potreba za korištenjem znakova koji nisu fiksni u ASCII tablicama i stoga zahtijevaju više od 1 bajta za pohranu. Za njih postoji širok karakter (wchar_t).

5.1. Nizovi

Nizovi vam omogućavaju da pohranite sekvencijalni skup elemenata istog tipa. Niz je pohranjen u memoriji kao neprekidni blok, tako da ne možete deklarirati niz bez specificiranja njegove veličine. Da biste deklarirali niz, uglaste zagrade () se pišu iza imena varijable koje označavaju njegovu veličinu. Na primjer:

Int myArray; // Niz od 5 elemenata cjelobrojnog tipa

Da bi se inicijalizirao niz, vrijednosti su navedene u vitičastim zagradama. Na ovaj način možete inicijalizirati samo u vrijeme deklaracije varijable. Usput, u ovom slučaju nije potrebno specificirati veličinu niza:

Int kvote = (1, 3, 7, 9, 11); // Niz je inicijaliziran sa 5 vrijednosti

Da biste pristupili određenoj vrijednosti u nizu (elementu niza), koristite operaciju pristupa indeksu () koja označava broj elementa (brojevi počinju od 0). Na primjer:

Odds; // pristup prvom elementu niza. Vraća vrijednost 1 odds; // pristup trećem elementu. Vraća vrijednost 7 odds = 13; // Dodijeliti novu vrijednost 5. elementu niza odds; // greška pristupa

5.3. Strings

Za pisanje stringa, programeri koriste ideju da je string sekvencijalni niz (niz) znakova. Da biste identificirali kraj reda, koristite poseban znak za kraj reda: '\0'. Ovi specijalni znakovi, koji se sastoje od obrnute kose crte i identifikacionog znaka, nazivaju se kontrolnim ili izlaznim znakovima. Tu su i, na primjer, '\n' - početak novog reda, '\t' - tabela. Za pisanje obrnute kose crte u nizu koristi se escape - druga kosa crta se stavlja ispred samog znaka: ‘\’. Escaping se također koristi za pisanje navodnika.

Kreirajmo varijablu niza:

Char textExample = ('T', 'e', ​​'s', 't', '\0'); // upisuje se string “Test”.

Postoji pojednostavljena notacija za inicijalizaciju niza:

Char textExample = “Test”; // Posljednji znak nije upisan, ali veličina je i dalje 5

Ne ulazeći u detalje, evo još jednog korisnog tipa podataka - string. Strings
Ova vrsta se može, na primjer, dodati:

String hello = "Zdravo,"; string name = "Maksimalno!"; string hello_name = zdravo + ime; // Dobiti string "Halo, Max!"

6. Link

Int a = 2; // varijabla "a" ukazuje na vrijednost 2 int &b = a; // varijabla “b” ukazuje na isto mjesto kao i “a” b = 4; // promjenom vrijednosti b, programer mijenja vrijednost a. Sada a = 4 int &c = 4; // greška, ovo ne možete učiniti, jer referenci se ne može dodijeliti vrijednost

7. Indeks

Da biste razumjeli ovaj tip podataka, morate zapamtiti da su mnoge vrijednosti ovog tipa adrese memorijskih ćelija gdje podaci počinju. Pokazivač također podržava operacije sabiranja (+), oduzimanja (-) i dereferenciranja (*).

Adrese 0x0 znače da je pokazivač prazan, tj. ne ukazuje ni na kakve podatke. Ova adresa ima svoj literal - NULL:

Int *nullPtr = NULL; // nulti pokazivač

Dopušta se dodavanje i oduzimanje adrese sa cijelim brojem ili drugom adresom
kretati se po memoriji dostupnoj programu.

Operacija preuzimanja podataka koja počinje na adresi pohranjenoj u pokazivaču naziva se dereferenciranje (*). Program čita potreban broj memorijskih ćelija i vraća vrijednost pohranjenu u memoriji.

Int valueInMemory = 2; // postavlja varijablu cjelobrojnog tipa int *somePtr = // kopiraj adresu varijable, ovdje & - vraća adresu varijable somePtr; // adresa memorijske ćelije, na primjer, 0x2F *somePtr; // vrijednost je pohranjena u 4 ćelije: 0x2F, 0x30, 0x31 i 0x32

Operacija dodjeljivanja, koja je sintaktički ista kao operacija kopiranja, nije dostupna za pokazivače. Drugim riječima, možete kopirati adresu drugog pokazivača ili adresu varijable, ali ne možete sami odrediti vrijednost adrese.

Sam pokazivač je pohranjen u memoriji, kao i vrijednosti varijabli drugih tipova, i zauzima 4 bajta, tako da možete kreirati pokazivač na pokazivač.

8. Transferi

Enumeracije su jedini osnovni tip koji je definisao programer. Uglavnom, nabrajanje je uređeni skup imenovanih cjelobrojnih konstanti, pri čemu je ime nabrajanja osnovni tip.

Enum boja (CRVENA, PLAVA, ZELENA);

Podrazumevano, CRVENA = 0, PLAVA = 1, ZELENA = 2. Dakle, vrednosti se mogu porediti jedna sa drugom, tj. RED< BLUE < GREEN. Программист при объявлении перечисления может самостоятельно задать значения каждой из констант:

Enum pristup (READ = 1, WRITE = 2, EXEC = 4);

Često je zgodno koristiti enumeracije čije su vrijednosti stepen dvojke, jer u binarnom predstavljanju, broj koji je stepen od 2 sastojat će se od 1 i nula. Na primjer:

8 10 = 00001000 2

Rezultat zbrajanja ovih brojeva uvijek jasno pokazuje koji su brojevi dodani:

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

Void

Sintaktički, tip void pripada osnovnim tipovima, ali se može koristiti samo kao dio složenijih tipova, jer Nema objekata tipa void. Obično se ovaj tip koristi da označi da funkcija nema povratnu vrijednost ili kao osnovni tip pokazivača na objekte nedefiniranih tipova:

Void object; // greška, nema objekata tipa void void // greška, nema referenci na void void *ptr; // ok, pohraniti pokazivač na nepoznati tip

Često ćemo koristiti void posebno da označimo da funkcija ne vraća nikakvu vrijednost. Pokazivač tipa void se koristi kada programer preuzima potpunu odgovornost za integritet memorije i ispravno prebacivanje tipa.

Cast

Često je potrebno prebaciti vrijednost varijable jednog tipa u drugi. U slučaju kada je skup vrijednosti originalnog tipa podskup većeg tipa (na primjer, int je podskup long, a long je double), kompajler može implicitno ( implicitno) promijenite tip vrijednosti.

cijeli broj = 2; float floating = cijeli broj; // plutajući = 2.0

Obrnuti tip cast će se izvršiti uz gubitak informacija, tako da će ostati samo cijeli dio broja s pomičnim zarezom, a razlomak će biti izgubljen.

Postoji mogućnost eksplicitne konverzije tipa za ovo, lijevo od varijable ili bilo koje vrijednosti originalnog tipa, u zagradama napišite tip na koji će biti izvedeno:

Int vrijednost = (int) 2,5;

Unarne i binarne operacije

Operacije koje smo ranije izvodili nazivaju se binarne: lijevo i desno od simbola operacije su vrijednosti ili varijable, na primjer, 2 + 3. Osim binarnih operacija, programski jezici koriste i unarne operacije koje se primjenjuju na varijable . Mogu se nalaziti ili lijevo ili desno od varijable, već je naišlo na nekoliko takvih operacija - operacija dereferenciranja (*) i uzimanje adrese varijable (&) su unarni; Operatori “++” i “—” povećavaju i smanjuju vrijednost cjelobrojne varijable za 1, respektivno, i mogu se pisati bilo lijevo ili desno od varijable.

C++ također koristi skraćeni zapis za binarne operacije u slučaju kada lijeva i desna strana izraza sadrže istu varijablu, tj. neka operacija se izvodi na vrijednosti varijable i rezultat operacije je pohranjen u istoj varijabli:

A += 2; // isto kao a = a + 2; b /= 5; // isto kao b = b / 5; c &= 3; // isto kao c = c & 3;