Premenné. Koľko vážia dátové typy Short premenná?

Pri písaní programu v akomkoľvek jazyku musíte použiť rôzne premenné na uloženie rôznych informácií. Premenné nie sú nič iné ako vyhradené miesta v pamäti na ukladanie hodnôt. To znamená, že keď vytvoríte premennú, ušetríte nejaké miesto v pamäti.

Môžete ukladať informácie rôznych typov údajov, ako je znak, široký znak, celé číslo, pohyblivá desatinná čiarka, dvojitá pohyblivá desatinná čiarka, boolean atď. Na základe typu údajov premennej operačný systém pridelí pamäť a rozhodne, čo môže byť uložené v rezervovaná pamäť.

Primitívne vstavané typy

C++ ponúka programátorovi bohatú sadu vstavaných, ako aj užívateľom definovaných dátových typov. Nasledujúce tabuľky uvádzajú sedem hlavných typov údajov C++:

Typ Kľúčové slovo
Boolean bool
Charakter char
Celé číslo int
Plávajúca desatinná čiarka plavák
Dvojitá pohyblivá desatinná čiarka dvojitý
Bezcenný neplatné
Široký charakter wchar_t

Niektoré zo základných typov je možné upraviť pomocou jedného alebo viacerých modifikátorov tohto typu:

  • podpísaný
  • nepodpísané
  • krátky

Nasledujúca tabuľka zobrazuje typ premennej, množstvo pamäte potrebnej na uloženie hodnoty do pamäte a aká je maximálna a minimálna hodnota, ktorú je možné do takýchto premenných uložiť.

Typ Typická bitová šírka Typický rozsah
char 1 bajt -127 až 127 alebo 0 až 255
nepodpísaný char 1 bajt 0 až 255
podpísaný char 1 bajt -127 až 127
int 4 bajty -2147483648 až 2147483647
unsigned int 4 bajty 0 až 4294967295
podpísané int 4 bajty -2147483648 až 2147483647
krátky int 2 bajty -32768 až 32767
unsigned short int Rozsah 0 až 65 535
podpísané krátke int Rozsah -32768 až 32767
dlhá int 4 bajty -2 147 483 648 až 2 147 483 647
podpísané dlhé int 4 bajty rovnaký ako dlhý int
unsigned long int 4 bajty 0 až 4,294,967,295
plavák 4 bajty +/- 3,4e +/- 38 (~7 číslic)
dvojitý 8 bajtov
dlhý dvojitý 8 bajtov +/- 1,7e +/- 308 (~15 číslic)
wchar_t 2 alebo 4 bajty 1 široký znak

Veľkosť premenných sa môže líšiť od veľkosti uvedenej v tabuľke vyššie v závislosti od kompilátora a počítača, ktorý používate. Nižšie je uvedený príklad, ktorý poskytne správnu veľkosť rôznych typov údajov vo vašom počítači.

#include pomocou menného priestoru std; int main() ( cout<< "Size of char: " << sizeof(char) << endl; cout << "Size of int: " << sizeof(int) << endl; cout << "Size of short int: " << sizeof(short int) << endl; cout << "Size of long int: " << sizeof(long int) << endl; cout << "Size of float: " << sizeof(float) << endl; cout << "Size of double: " << sizeof(double) << endl; cout << "Size of wchar_t: " << sizeof(wchar_t) << endl; return 0; }

Tento príklad používa endl ktorý za každým riadkom zavádza znak nového riadku a operátor<< используется для передачи нескольких значений на экран. Мы также используем оператор veľkosť() získať veľkosť rôznych typov údajov.

Keď je vyššie uvedený kód skompilovaný a spustený, vytvorí nasledujúci výstup, ktorý sa môže líšiť od stroja k stroju:

Veľkosť char: 1 Veľkosť int: 4 Veľkosť krátkej int: 2 Veľkosť dlhej int: 4 Veľkosť plaváka: 4 Veľkosť double: 8 Veľkosť wchar_t: 4

Deklarácie Typedef

Pomocou typedef môžete vytvoriť nový názov pre existujúci typ. Nižšie je uvedená jednoduchá syntax na definovanie nového typu pomocou typedef:

Typedef type newname;

Napríklad nasledujúci text hovorí kompilátoru, že nohy je iný názov pre int:

Typedef int nohy;

Teraz je nasledujúca deklarácia úplne legálna a vytvára celočíselnú premennú nazývanú vzdialenosť:

Vzdialenosť nôh

Uvedené typy

Enumerovaný typ deklaruje voliteľný názov typu a množinu nula alebo viacerých identifikátorov, ktoré možno použiť ako hodnoty typu. Každý enumerátor je konštanta, ktorej typ je enumerácia. Vytvorenie enumu vyžaduje použitie kľúčového slova enum. Všeobecný pohľad na typ enumerácie:

Enum enum-name ( zoznam mien ) var-list;

Tu enum-name je názov typu enum. Zoznam mien je oddelený čiarkou. Napríklad nasledujúci kód definuje zoznam farieb nazývaných farby a premennú c typu color. Nakoniec sa c priradí hodnota „modrá“.

Enum color (červená, zelená, modrá) c; c = modrá;

V predvolenom nastavení je hodnota krstného mena 0, druhé meno je hodnota 1 a tretie je hodnota 2 atď. Meno však môžete zmeniť na konkrétnu hodnotu pridaním inicializátora. Napríklad v nasledujúcom zozname by zelená mala hodnotu 5.

Enum color (červená, zelená = 5, modrá);

Modrá tu bude mať hodnotu 6, pretože každé meno bude väčšie ako predchádzajúce.

V tejto lekcii sa pozrieme na celočíselné dátové typy, ich rozsahy hodnôt, delenie a pretečenie: čo to je a aké sú príklady.

Integer dátové typy

Integer dátový typ je typ, ktorého premenné môžu obsahovať iba celé čísla (bez zlomkovej časti, napr.: -2, -1, 0, 1, 2). V C++ je k dispozícii päť základných celočíselných typov:

Poznámka: Typ char je špeciálny prípad, ide o celočíselný aj znakový dátový typ. Podrobnejšie si o tom povieme v jednej z nasledujúcich lekcií.

Hlavný rozdiel medzi vyššie uvedenými typmi celých čísel je v tom, že čím je väčšia, tým viac hodnôt môže premenná tohto typu uložiť.

Definovanie celočíselných premenných

Deje sa to nasledovne:

char c; krátke int si; // platné krátke s; //preferované int i; dlhý int li; // platné dlhé l; // najlepšie long long int lli; // platný long long ll; // radšej

Aj keď je možné použiť celé názvy short int , long int a long long int , uprednostňujú sa ich skrátené verzie (bez int). Navyše neustále pridávanie ints sťažuje čítanie kódu (ľahko zameniteľné s premennou).

Rozsahy hodnôt a znamienko celočíselných dátových typov

Ako už viete z predchádzajúcej lekcie, premenná s n-tým počtom bitov môže uložiť 2n možných hodnôt. Ale aké sú tieto významy? Tie, ktoré sú v dosahu. Rozsah- to sú hodnoty, z ktorých a do ktorých môže určitý typ údajov uložiť. Rozsah celočíselnej premennej je určený dvoma faktormi: jej veľkosťou (v bitoch) a jej znamenie(čo môže byť podpísaný alebo nepodpísané).

Typ celého čísla so znamienkom (so znakom) znamená, že premenná môže obsahovať kladné aj záporné čísla. Ak chcete deklarovať premennú ako podpísanú, použite kľúčové slovo podpísané:

podpísaný znak c; podpísané krátke s; podpísané int i; podpísané dlhé l; podpísaný dlhý dlhý ll;

podpísaný znak c ;

podpísané krátke s ;

podpísané int i;

podpísané dlhé l ;

podpísaný dlhý dlhý ll ;

Štandardne sa podpísané kľúčové slovo zapíše pred typ údajov.

1-bajtová celočíselná premenná so znamienkom má rozsah hodnôt od -128 do 127. Dá sa do nej bezpečne uložiť akákoľvek hodnota od -128 do 127 (vrátane).

V niektorých prípadoch môžeme vopred vedieť, že v programe nebudú použité záporné čísla. Toto je veľmi bežné pri použití premenných na uloženie množstva alebo veľkosti niečoho (napríklad vaša výška alebo hmotnosť nemôže byť záporná).

Celočíselný typ nepodpísané (nepodpísané) môže obsahovať iba kladné čísla. Ak chcete deklarovať premennú ako nepodpísané, použite kľúčové slovo bez znamienka:

unsigned char c; krátke s bez znamienka; unsigned int i; nesignované dlhé l; nesignované dlhé dlhé ll;

unsigned char c ;

nepodpísané krátke s ;

unsigned int i ;

bez znamienka dlhé l ;

nesignované dlhé dlhé ll;

1-bajtová celočíselná premenná bez znamienka má rozsah hodnôt od 0 do 255.

Upozorňujeme, že deklarovanie premennej ako bez znamienka znamená, že nemôže obsahovať záporné čísla (iba kladné).

Teraz, keď ste pochopili rozdiel medzi podpísaným a nepodpísaným, pozrime sa na rozsahy hodnôt rôznych typov údajov:

Veľkosť/Typ Rozsah hodnôt
1 bajt podpísaný -128 až 127
1 bajt nepodpísaný od 0 do 255
2 bajty podpísané od -32 768 do 32 767
2 bajty bez znamienka od 0 do 65 535
4 bajty podpísané od -2 147 483 648 do 2 147 483 647
4 bajty bez znamienka od 0 do 4 294 967 295
8 bajtov podpísaných od -9 223 372 036 854 775 808 do 9 223 372 036 854 775 807
8 bajtov bez znamienka od 0 do 18 446 744 073 709 551 615

Pre matematikov: Premenná so znamienkom s n-tým počtom bitov má rozsah od -(2 n-1) do 2 n-1 -1. Premenná bez znamienka s n-tým počtom bitov má rozsah od 0 do (2n)-1. Pre nematematikov: použite tabuľku :)

Začínajúci programátori sa niekedy mýlia medzi podpísanými a nepodpísanými premennými. Existuje však jednoduchý spôsob, ako si ich rozdiely zapamätať. Aký je rozdiel medzi záporným číslom a kladným číslom? Správny! Mínus vpredu. Ak nie je mínus, potom je číslo kladné. Preto typ celého čísla so znamienkom znamená, že môže byť prítomné znamienko mínus, t.j. čísla môžu byť kladné alebo záporné. Typ celého čísla bez znamienka znamená, že znamienko mínus vpredu úplne chýba, t.j. čísla môžu byť len kladné.

Čo je predvolené: podpísané alebo nepodpísané?

Čo sa teda stane, ak deklarujeme premennú bez podpísania alebo bez podpísania?

Všetky celočíselné dátové typy okrem char sú štandardne podpísané. Typ znaku môže byť podpísaný alebo nepodpísaný (zvyčajne je však podpísaný).

Vo väčšine prípadov sa podpísané kľúčové slovo nezapisuje (je už štandardne používané), s výnimkou typu char (tu je lepšie objasniť).

Programátori sa spravidla vyhýbajú používaniu celočíselných typov bez znamienka, pokiaľ to nie je osobitne potrebné, pretože podľa štatistík sa pri premenných bez znamienka vyskytuje viac chýb ako pri premenných so znamienkom.

Pravidlo: Použite typy celých čísel so znamienkom namiesto nepodpísané.

Pretečenie

Otázka: Čo sa stane, ak sa pokúsime použiť hodnotu, ktorá je mimo rozsahu hodnôt určitého typu údajov? Odpoveď: "Pretečenie".

Pretečenie(Angličtina) "pretečenie") nastáva, keď sa bity stratia, pretože premennej nebolo pridelené dostatok pamäte na ich uloženie.

Príklady pretečenia

Zvážte premennú bez znamienka, ktorá pozostáva zo 4 bitov. Do tejto premennej sa zmestí ktorékoľvek z binárnych čísel uvedených v tabuľke vyššie.

"Čo sa však stane, ak sa pokúsime priradiť hodnotu, ktorá zaberá viac ako 4 bity?" Správny! Pretečenie. Naša premenná bude uchovávať iba 4 najmenej významné (tie napravo) bity, všetky ostatné sa stratia.

Napríklad, ak sa pokúsime vložiť číslo 21 do našej 4-bitovej premennej:

Desatinná sústava Binárny systém
21 10101

Číslo 21 zaberá 5 bitov (10101). 4 bity napravo (0101) sa zmestia do premennej a bit úplne vľavo (1) sa jednoducho stratí. Tie. naša premenná bude obsahovať 0101, čo sa rovná 101 (predná nula sa nepočíta) a toto je už číslo 5, nie 21.

Poznámka: O prevode čísel z dvojkových na desiatkové a naopak bude samostatná lekcia, kde všetko podrobne zvážime a preberieme.

Teraz sa pozrime na príklad v kóde (krátky typ má 16 bitov):

#include int main() ( unsigned short x = 65535; // najväčšia hodnota, ktorú môže uložiť 16-bitová premenná std::cout bez znamienka<< "x was: " << x << std::endl; x = x + 1; // 65536 - это число больше максимально допустимого числа из диапазона допустимых значений. Следовательно, произойдёт переполнение, так как переменнная x не может хранить 17 бит std::cout << "x is now: " << x << std::endl; return 0; }

#include

int main()

unsigned short x = 65535 ; // najväčšia hodnota, ktorú môže 16-bitová premenná bez znamienka uložiť

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

x = x + 1; // 65536 je číslo väčšie ako maximálne povolené číslo z rozsahu platných hodnôt. Preto dôjde k pretečeniu, pretože premenná x nemôže uložiť 17 bitov

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

návrat 0;

x bolo: 65535
x je teraz: 0

Čo sa stalo? Došlo k pretečeniu, pretože sme sa snažili vtesnať niečo, čo sa nedalo vložiť do premennej x.

Pre tých, ktorí chcú vedieť viac:Číslo 65535 v binárnej podobe je reprezentované ako 1111 1111 1111 1111. 65535 je najväčšie číslo, ktoré môže uložiť 2-bajtová (16-bitová) celočíselná premenná bez znamienka, pretože používa všetkých 16 bitov. Keď sčítame 1, dostaneme číslo 65536. Číslo 65536 je binárne reprezentované ako 1 0000 0000 0000 0000 a zaberá 17 bitov! Preto sa stratí najdôležitejší bit (čo je 1) a všetkých 16 bitov vpravo zostane zachovaných. Kombinácia 0000 0000 0000 0000 zodpovedá desatinnej 0, čo je náš výsledok.

Podobne získame pretečenie použitím čísla menšieho ako minimum z rozsahu platných hodnôt:

#include int main() ( unsigned short x = 0; // najmenšia hodnota, ktorú môže 2-bajtová premenná bez znamienka uložiť std::cout<< "x was: " << x << std::endl; x = x - 1; // переполнение! std::cout << "x is now: " << x << std::endl; return 0; }

#include

int main()

unsigned short x = 0 ; // najmenšia hodnota, ktorú môže uložiť 2-bajtová premenná bez znamienka

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

x = x-1; // pretečeniu!

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

návrat 0;

Výsledok spustenia vyššie uvedeného programu:

x bolo: 0
x je teraz: 65535

Pretečenie vedie k strate informácií, čo nikdy nie je dobré. Ak existuje čo i len najmenšie podozrenie alebo náznak, že hodnota premennej môže byť číslo, ktoré je mimo rozsahu prípustných hodnôt používaného typu údajov, použite väčší typ údajov!

Tento cheat sheet poskytuje informácie o hlavných dátových typoch programovacieho jazyka C++ a vlastnostiach ich implementácie. Na konci záznamu je tiež tabuľka s rozsahmi hodnôt týchto typov.

Koncept dátového typu

Hlavným účelom každého programu je spracovávať údaje. Rôzne typy údajov sa ukladajú a spracúvajú odlišne. V akomkoľvek algoritmickom jazyku musí mať každá konštanta, premenná, výraz alebo funkcia špecifický typ.

Typ údajov definuje:

  • interná reprezentácia údajov v počítačovej pamäti;
  • množina hodnôt, ktoré môžu nadobudnúť množstvá tohto typu;
  • operácie a funkcie, ktoré možno aplikovať na veličiny tohto typu.

Na základe týchto charakteristík programátor vyberie typ každej veličiny použitej v programe na reprezentáciu skutočných objektov. Požadovaná deklarácia typu umožňuje kompilátoru kontrolovať platnosť rôznych programových konštrukcií. Typ hodnoty určuje strojové inštrukcie, ktoré sa použijú na spracovanie údajov.

Všetky typy jazyka C++ možno rozdeliť na základné A zložený . Jazyk C++ definuje šesť Hlavná dátové typy reprezentujúce celočíselné, reálne, znakové a logické hodnoty. Na základe týchto typov môže programátor zadať popis zložený typy. Patria sem polia, enumerácie, funkcie, štruktúry, odkazy, ukazovatele, zväzy a triedy.

Základné dátové typy v C++

Základné (štandardné) typy údajov sa často nazývajú aritmetické, pretože sa dajú použiť v aritmetických operáciách. Na opis hlavných typov sú definované nasledujúce:

  1. int(int);
  2. char(char);
  3. wchar_t(widechar);
  4. bool(boolean);
  5. float(skutočný);
  6. double (reálna dvojitá presnosť).

Prvé štyri typy sa nazývajú celé číslo ( celý ), posledné dve - typy s pohyblivou rádovou čiarkou . Kód, ktorý kompilátor generuje na spracovanie celočíselných hodnôt, sa líši od kódu pre hodnoty s pohyblivou rádovou čiarkou.

Sú tu štyri špecifikátor typu , objasňujúce internú reprezentáciu a rozsah hodnôt štandardných typov:

  • krátky (krátky);
  • dlhý (dlhý);
  • podpísaný (podpísaný);
  • nepodpísané.

Typ celého čísla (int)

Veľkosť typu int nie je definovaná štandardom, ale závisí od počítača a kompilátora. Pre 16-bitový procesor sú pre hodnoty tohto typu alokované 2 bajty, pre 32-bitový procesor - 4 bajty.

Krátky špecifikátor pred názvom typu indikuje kompilátoru, že pre číslo musia byť alokované 2 bajty, bez ohľadu na kapacitu procesora. Dlhý špecifikátor znamená, že celočíselná hodnota bude zaberať 4 bajty. Takže na 16-bitovom počítači sú ekvivalenty int a short int a na 32-bitovom počítači sú ekvivalenty int a long int.

Vnútorné zastúpenie hodnoty typu integer - celé číslo v binárnom kóde. Pri použití špecifikátora so znamienkom sa najvýznamnejší bit čísla interpretuje ako znamienko (0 je kladné číslo, 1 je záporné číslo). Špecifikátor bez znamienka umožňuje reprezentovať iba kladné čísla, pretože najvýznamnejší bit sa považuje za súčasť kódu čísla. Rozsah hodnôt typu int teda závisí od špecifikátorov. Rozsahy hodnôt hodnôt celočíselného typu s rôznymi špecifikátormi pre počítače kompatibilné s IBM PC sú uvedené v tabuľke „Rozsahy hodnôt jednoduchých dátových typov“ na konci položky.

V predvolenom nastavení sa všetky typy celých čísel považujú za podpísané, čo znamená, že špecifikátor so znamienkom možno vynechať.

Konštantám nájdeným v programe je priradený jeden alebo druhý typ podľa ich typu. Ak programátor z nejakého dôvodu nie je spokojný s týmto typom, môže výslovne uviesť požadovaný typ pomocou prípon L, l (dlhý) a U, u (bez znamienka). Napríklad konštanta 32L bude typu long a zaberie 4 bajty. Prípony L a U môžete použiť súčasne, napríklad 0x22UL alebo 05Lu.

Poznámka

Typy short int, long int, signed int a unsigned int možno skrátiť na short, long, signed a unsigned.

Typ znaku (char)

Hodnote typu znaku je pridelený počet bajtov dostatočný na umiestnenie akéhokoľvek znaku zo znakovej sady pre daný počítač, čo určuje názov typu. Zvyčajne je to 1 bajt. Typ char, podobne ako iné celočíselné typy, môže byť podpísaný alebo bez znamienka. Hodnoty so znamienkom môžu ukladať hodnoty v rozsahu -128 až 127. Pomocou špecifikátora bez znamienka môžu byť hodnoty v rozsahu od 0 do 255. To stačí na uloženie ľubovoľného znaku v 256-znakovej znakovej sade ASCII. Hodnoty typu char sa tiež používajú na ukladanie celých čísel, ktoré nepresahujú hranice zadaných rozsahov.

Rozšírený typ znaku (wchar_t)

Typ wchar_t je navrhnutý tak, aby pracoval s množinou znakov, pre ktoré 1 bajt nestačí na zakódovanie, napríklad Unicode. Veľkosť tohto typu závisí od implementácie; spravidla zodpovedá typu krátky. Reťazcové konštanty typu wchar_t sa zapisujú s predponou L, napríklad L»Gates».

boolovský typ (bool)

Booleovské hodnoty môžu mať iba hodnoty true a false, čo sú vyhradené slová. Interná forma vyjadrenia hodnoty false je 0 (nula). Akákoľvek iná hodnota sa interpretuje ako pravdivá. Pri konverzii na celočíselný typ má true hodnotu 1.

Typy s pohyblivou rádovou čiarkou (float, double a long double)

Štandard C++ definuje tri dátové typy na ukladanie reálnych hodnôt: float, double a long double.

Dátové typy s pohyblivou rádovou čiarkou sú uložené inak v pamäti počítača ako celočíselné dátové typy. Vnútorná reprezentácia reálneho čísla pozostáva z dvoch častí – mantisy a exponentu. Na počítačoch kompatibilných s IBM PC zaberajú pohyblivé hodnoty 4 bajty, z ktorých jedna binárna číslica je priradená znaku mantisy, 8 bitov exponentu a 23 mantise. Mantisa je číslo väčšie ako 1,0, ale menšie ako 2,0. Keďže vedúca číslica mantisy je vždy 1, neukladá sa.

Pre dvojité hodnoty, ktoré zaberajú 8 bajtov, je pre exponent a mantisu pridelených 11 a 52 bitov. Dĺžka mantisy určuje presnosť čísla a dĺžka exponentu určuje jeho rozsah. Ako môžete vidieť z tabuľky na konci záznamu, pri rovnakom počte bajtov pridelených pre hodnoty float a long int sa rozsahy ich prípustných hodnôt značne líšia z dôvodu internej formy zastúpenia.

Dlhý špecifikátor pred názvom dvojitého typu označuje, že pre jeho hodnotu je alokovaných 10 bajtov.

Konštanty s pohyblivou rádovou čiarkou sú štandardne dvojitého typu. Typ konštanty môžete explicitne určiť pomocou prípon F, f (float) a L, l (long). Napríklad konštanta 2E+6L bude typu long double a konštanta 1,82f bude typu float.

Ak chcete písať programy, ktoré sú prenosné naprieč platformami, nemôžete robiť predpoklady o veľkosti typu int. Na jej získanie je potrebné použiť operáciu sizeof, ktorej výsledkom je veľkosť typu v bajtoch. Napríklad pre operačný systém MS-DOS bude mať sizeof (int) za následok 2, ale pre Windows 98 alebo OS/2 bude výsledok 4.

Norma ANSI nešpecifikuje rozsahy hodnôt pre základné typy, sú definované len vzťahy medzi ich veľkosťami, napríklad:

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

Poznámka

Minimálne a maximálne povolené hodnoty pre celočíselné typy závisia od implementácie a sú uvedené v hlavičkovom súbore (), charakteristika reálnych typov - v súbore (), ako aj v šablóne triedy numeric_limits

typu void

Okrem tých, ktoré sú uvedené, medzi hlavné typy jazyka patrí typ void, ale množina hodnôt tohto typu je prázdna. Používa sa na definovanie funkcií, ktoré nevracajú hodnotu, na špecifikovanie prázdneho zoznamu argumentov funkcií, ako základného typu pre ukazovatele a pri operáciách pretypovania.

Rozsahy hodnôt jednoduchých dátových typov v C++ pre počítače kompatibilné s IBM PC

Otázka: Čo znamená pojem IBM PC-kompatibilný počítač?
Odpoveď: Počítač kompatibilný s IBM PC je počítač, ktorý je architektonicky blízky počítačom IBM PC, XT a AT. Počítače kompatibilné s IBM PC sú postavené na mikroprocesoroch kompatibilných s Intel 8086 (a ako viete, všetky neskoršie procesory Intel sú plne spätne kompatibilné s 8086). V skutočnosti sú to takmer všetky moderné počítače.

Zaviedli sa rôzne typy celočíselných a reálnych typov, ktoré sa líšia rozsahom a presnosťou reprezentácie údajov, aby programátor mal možnosť čo najefektívnejšie využívať možnosti konkrétneho zariadenia, pretože rýchlosť výpočtov a množstvo pamäte závisia od výber typu. Program optimalizovaný pre jeden typ počítača však nemusí byť prenosný na iné platformy, takže vo všeobecnosti by ste sa nemali spoliehať na špecifické vlastnosti typov údajov.

Typ Rozsah hodnôt Veľkosť (bajty)
bool pravda a nepravda 1
podpísaný char -128 … 127 1
nepodpísaný char 0 … 255 1
podpísané krátke int -32 768 … 32 767 2
unsigned short int 0 … 65 535 2
podpísané dlhé int -2 147 483 648 … 2 147 483 647 4
unsigned long int 0 … 4 294 967 295 4
plavák 3,4e-38 … 3,4e+38 4
dvojitý 1,7e-308 … 1,7C+308 8
dlhý dvojitý 3,4e-4932 … 3,4e+4932 10

Pre reálne typy sú v tabuľke uvedené absolútne hodnoty minimálnych a maximálnych hodnôt.

V jazyku C sa rozlišuje medzi pojmami „údajový typ“ a „modifikátor typu“. Typ údajov je celé číslo a modifikátor je so znamienkom alebo bez znamienka. Celé číslo so znamienkom bude mať kladné aj záporné hodnoty, zatiaľ čo celé číslo bez znamienka bude mať iba kladné hodnoty. V jazyku C existuje päť základných typov.

  • char – znak.
  • Premenná typu char má veľkosť 1 bajt, jej hodnoty sú rôzne znaky z kódovej tabuľky, napríklad: 'f', ':', 'j' (keď sú zapísané v programe, sú uzavreté v jednotke citácie).

  • int – celok.
  • Veľkosť premennej typu int nie je v štandarde jazyka C definovaná. Vo väčšine programovacích systémov veľkosť premennej typu int zodpovedá veľkosti celého strojového slova. Napríklad v kompilátoroch pre 16-bitové procesory má premenná typu int veľkosť 2 bajty. V tomto prípade môžu podpísané hodnoty tejto premennej ležať v rozsahu od -32768 do 32767.

  • plavák – skutočný.
  • Kľúčové slovo float vám umožňuje definovať premenné skutočného typu. Ich hodnoty majú zlomkovú časť oddelenú bodkou, napríklad: -5,6, 31,28 atď. Reálne čísla možno zapísať aj vo forme s pohyblivou rádovou čiarkou, napríklad: -1,09e+4. Číslo pred symbolom „e“ sa nazýva mantisa a za „e“ sa nazýva exponent. Premenná typu float zaberá 32 bitov v pamäti. Môže nadobudnúť hodnoty v rozsahu od 3,4e-38 do 3,4e+38.

  • double – double precision real;
  • Kľúčové slovo double vám umožňuje definovať skutočnú premennú s dvojitou presnosťou. Zaberá dvakrát toľko miesta v pamäti ako float premenná. Premenná dvojitého typu môže nadobúdať hodnoty v rozsahu od 1,7e-308 do 1,7e+308.

  • neplatné – žiadna hodnota.
  • Kľúčové slovo void sa používa na neutralizáciu hodnoty objektu, napríklad na deklarovanie funkcie, ktorá nevracia žiadnu hodnotu.

Variabilné typy:

Programy pracujú s rôznymi údajmi, ktoré môžu byť jednoduché alebo štruktúrované. Jednoduché dáta sú celé a reálne čísla, symboly a ukazovatele (adresy objektov v pamäti). Celé čísla nemajú zlomkovú časť, ale reálne čísla áno. Štruktúrované dáta sú polia a štruktúry; budú diskutované nižšie.

Premenná je bunka v pamäti počítača, ktorá má názov a uchováva nejakú hodnotu. Hodnota premennej sa môže počas vykonávania programu meniť. Keď sa do bunky zapíše nová hodnota, stará sa vymaže.

Dobrým štýlom je zmysluplné pomenovanie premenných. Názov premennej môže obsahovať jeden až 32 znakov. Je povolené používať malé a veľké písmená, čísla a podčiarkovník, ktorý sa v C považuje za písmeno. Prvý znak musí byť písmeno. Názov premennej sa nemôže zhodovať s rezervovanými slovami.

Zadajte char

char je najhospodárnejší typ. Typ znaku môže byť podpísaný alebo nepodpísaný. Označuje sa ako „signed char“ (podpísaný typ) a „unsigned char“ (nepodpísaný typ). Podpísaný typ môže ukladať hodnoty v rozsahu -128 až +127. Bez znamienka – od 0 do 255. Pre premennú char je pridelený 1 bajt pamäte (8 bitov).

Kľúčové slová so znamienkom a bez znamienka označujú, ako sa interpretuje nulový bit deklarovanej premennej, t.j. ak je špecifikované kľúčové slovo bez znamienka, potom sa nulový bit interpretuje ako časť čísla, inak sa nulový bit interpretuje ako so znamienkom.

Zadajte int

Celočíselná hodnota int môže byť krátka alebo dlhá. Krátke kľúčové slovo sa umiestni za podpísané alebo nepodpísané kľúčové slová. Existujú teda typy: podpísané short int, unsigned short int, signed long int, unsigned long int.

Premenná typu signed short int (krátke celé číslo so znamienkom) môže nadobúdať hodnoty od -32768 do +32767, unsigned short int (krátke celé číslo bez znamienka) - od 0 do 65535. Každá z nich má pridelené presne dva bajty pamäte (16 bity).

Pri deklarovaní premennej typu sign short int možno kľúčové slová sign a short vynechať a takýto typ premennej možno deklarovať jednoducho int. Tento typ je možné deklarovať aj jedným kľúčovým slovom krátkym.

Premenná int typu unsigned short int môže byť deklarovaná ako int unsigned alebo unsigned short.

Pre každú hodnotu long int so znamienkom alebo bez znamienka long int sú alokované 4 bajty pamäte (32 bitov). Hodnoty premenných tohto typu môžu byť v rozsahu od -2147483648 do 2147483647 a od 0 do 4294967295.

Existujú aj premenné typu long long int, pre ktoré je alokovaných 8 bajtov pamäte (64 bitov). Môžu byť podpísané alebo nepodpísané. Pre typ so znamienkom je rozsah hodnôt od -9223372036854775808 do 9223372036854775807, pre typ bez znamienka - od 0 do 18446744073709551615. Typ so znamienkom možno deklarovať aj jednoducho pomocou dvoch dlhých kľúčových slov.

Typ Rozsah Hexadecimálny rozsah Veľkosť
nepodpísaný char 0 … 255 0x00...0xFF 8 bit
podpísaný char
alebo jednoducho
char
-128 … 127 -0x80…0x7F 8 bit
unsigned short int
alebo jednoducho
unsigned int alebo unsigned short
0 … 65535 0x0000…0xFFFF 16 bit
podpísané krátke int alebo podpísané int
alebo jednoducho
krátky alebo int
-32768 … 32767 0x8000…0x7FFF 16 bit
unsigned long int
alebo jednoducho
nepodpísané dlhé
0 … 4294967295 0x00000000 … 0xFFFFFFFF 32 bit
podpísaný dlho
alebo jednoducho
dlhý
-2147483648 … 2147483647 0x80000000 … 0x7FFFFFFF 32 bit
nepodpísané dlhé dlhé 0 … 18446744073709551615 0x0000000000000000 … 0xFFFFFFFFFFFFFFFFFF 64 bit
podpísaný dlho dlho
alebo jednoducho
dlho dlho
-9223372036854775808 … 9223372036854775807 0x8000000000000000 … 0x7FFFFFFFFFFFFFF 64 bit

Deklarovanie premenných

Premenné sú deklarované v deklaračnom príkaze. Deklaračný príkaz pozostáva zo špecifikácie typu a zo zoznamu názvov premenných oddelených čiarkami. Na konci musí byť bodkočiarka.

[modifikátory] typ_špecifikátor identifikátor [, identifikátor] ...

Modifikátory – kľúčové slová podpísané, nepodpísané, krátke, dlhé.
Špecifikátor typu je kľúčové slovo char alebo int, ktoré určuje typ deklarovanej premennej.
Identifikátor je názov premennej.

znak x; int a, b, c; bez znamienka dlhé dlhé y;

Keď je deklarovaná, premenná môže byť inicializovaná, to znamená, že jej môže byť priradená počiatočná hodnota.

Int x = 100;

Pri deklarácii bude premenná x okamžite obsahovať číslo 100. Inicializované premenné je lepšie deklarovať na samostatných riadkoch.

V programovaní je dátový typ súborom dvoch množín: množiny hodnôt a množiny operácií, ktoré je možné na ne použiť. Napríklad operácie sčítania (+), násobenia (*), delenia celého čísla (/), zvyšku (%) a odčítania (-) možno použiť na nezáporný celočíselný dátový typ pozostávajúci z konečnej množiny prirodzených čísel.

Programovací jazyk má zvyčajne množinu primitívnych dátových typov – typov, ktoré poskytuje programovací jazyk ako základná vstavaná jednotka. V C++ tvorca jazyka nazýva takéto typy základnými typmi. Základné typy v C++ sú:

  • boolean(bool);
  • znak (napr. char);
  • int (napr. int);
  • s pohyblivou rádovou čiarkou (napr. float);
  • enumerácie (definované programátorom);
  • prázdnota .

Okrem uvedených typov sú postavené tieto typy:

  • demonštratívne (napr. int*);
  • polia (napr. char);
  • odkaz (napr. double&);
  • iné štruktúry.

Prejdime ku konceptu literálu (napríklad 1, 2.4F, 25e-4, 'a' atď.): literál je záznam v zdrojovom kóde programu, ktorý predstavuje pevnú hodnotu. Inými slovami, literál je jednoducho reprezentácia objektu (hodnoty) nejakého typu v programovom kóde. C++ má schopnosť zapisovať celočíselné hodnoty, hodnoty s pohyblivou rádovou čiarkou, znakové, boolovské a reťazcové hodnoty.

Celočíselný literál možno napísať ako:

  • 10. číselná sústava. Napríklad 1205;
  • 8. číselná sústava vo formáte 0 + číslo. Napríklad 0142;
  • 16. číselná sústava vo formáte 0x + číslo. Napríklad 0x2F.

24, 030, 0x18 - to sú všetky záznamy rovnakého čísla v rôznych číselných sústavách.
Ak chcete písať čísla s pohyblivou rádovou čiarkou, použite bodkový zápis: 0,1, 0,5, 4. - buď v
exponenciálny zápis - 25e-100. V takomto zázname by nemali byť žiadne medzery.

Názov, s ktorým môžeme spájať hodnoty napísané v doslovoch, sa nazýva premenná. Premenná je pomenovaná alebo inak adresovateľná oblasť pamäte, ktorej adresu možno použiť na prístup k údajom. Tieto údaje sa zapisujú, prepisujú a vymazávajú v pamäti špecifickým spôsobom počas vykonávania programu. Premenná vám umožňuje kedykoľvek pristupovať k údajom a v prípade potreby ich meniť. Údaje, ktoré možno získať z názvu premennej, sa nazývajú hodnota premennej.
Aby bolo možné použiť premennú v programe, musí byť deklarovaná a v prípade potreby môže byť definovaná (= inicializovaná). Deklarácia premennej v texte programu nevyhnutne obsahuje 2 časti: základný typ a deklarátor. Špecifikátor a inicializátor sú voliteľné časti:

Const int príklad = 3; // tu const je špecifikátor // int je základný typ // príklad je názov premennej // = 3 - inicializátor.

Názov premennej je postupnosť znakov pozostávajúca z písmen latinskej abecedy (malé a veľké), číslic a/alebo podčiarkovníka, ale prvý znak nemôže byť číslo. Názov premennej by mal byť zvolený tak, aby bolo vždy ľahké uhádnuť, čo ukladá, napríklad „monthPayment“. V poznámkach a v praxi budeme pre pravidlá zaznamenávania premenných používať notáciu CamelCase. Názov premennej sa nemôže zhodovať so slovami rezervovanými v jazyku, príklady takýchto slov sú: if, while, function, goto, switch atď.

Okrem názvu premennej môže deklarátor obsahovať ďalšie znaky:

  • * - ukazovateľ; pred menom;
  • *const - konštantný ukazovateľ; pred menom;
  • & - odkaz; pred menom;
  • - pole; za menom;
  • () - funkcia; za menom.

Inicializátor vám umožňuje definovať hodnotu premennej bezprostredne po jej deklarácii. Inicializátor začína literálom rovnosti (=) a potom pokračuje nastavením hodnoty premennej. Všeobecne povedané, znamienko rovnosti v C++ označuje operáciu priradenia; s jeho pomocou môžete nastaviť a zmeniť hodnotu premennej. Pre rôzne typy sa môže líšiť.

Špecifikátor špecifikuje ďalšie atribúty iné ako typ. Špecifikátor const uvedený v príklade vám umožňuje zakázať následné zmeny hodnoty premennej. Takéto nemenné premenné sa nazývajú konštantné alebo konštantné.

Deklarovanie konštanty bez inicializácie nebude fungovať z logických dôvodov:

Const int EMPTY_CONST; // chyba, neinicializuje sa konštantná premenná const int PRÍKLAD = 2; // konštanta s hodnotou 2 PRÍKLAD = 3; // chyba, pokus o priradenie hodnoty konštantnej premennej

Pri pomenovaní konštánt je zvykom používať iba veľké písmená, pričom slová oddeľujeme znakom podčiarknutia.

Základné dátové typy v C++

Pri skúmaní každého typu by čitateľ nemal zabúdať na definíciu dátového typu.

1. Typ celého čísla (char, short (int), int, long (int), long long)

Z názvu je ľahké pochopiť, že množina hodnôt pozostáva z celých čísel. Sada hodnôt každého z uvedených typov môže byť tiež podpísaná alebo nepodpísaná. Počet prvkov obsiahnutých v množine závisí od veľkosti pamäte použitej na uloženie hodnoty daného typu. Napríklad pre premennú typu char je alokovaný 1 bajt pamäte, takže celkové prvky budú:

  • 2 8N = 2 8 * 1 = 256, kde N je veľkosť pamäte v bajtoch na uloženie hodnoty

V tomto prípade sú rozsahy dostupných celých čísel nasledovné:

  • - pre nepodpísané char
  • [-128..127] - pre podpísané char

Štandardne sa celočíselná premenná považuje za podpísanú. Na označenie v kóde, že premenná musí byť bez znamienka, sa k základnému typu vľavo pridá atribút signovaný, t.j. nepodpísané:

Dlhé hodnoty bez znamienka; // určuje celočíselný (dlhý) typ bez znamienka.

Uvedené typy sa líšia iba veľkosťou pamäte potrebnej na uloženie. Keďže jazyk C++ je značne závislý od stroja, jazykový štandard zaručuje iba nasledujúcu podmienku:

  • 1 = veľkosť znaku ≤ krátka veľkosť ≤ veľkosť int ≤ dlhá veľkosť.

Typicky sú veľkosti typov nasledovné: char - 1, short - 2, int - 4, long -8, long long - 8 bajtov.

Môžete vykonávať aritmetické operácie s hodnotami typu celé číslo: +, -, *, /, %; porovnávacie operácie: ==, !=,<=, <, >, >=; bitové operácie: &, |, xor,<<, >>.
Väčšina operácií, ako je sčítanie, násobenie, odčítanie a porovnávanie, je ľahko zrozumiteľná. Niekedy po vykonaní aritmetických operácií môže byť výsledok mimo rozsahu hodnôt; v tomto prípade program vygeneruje chybu.
Celočíselné delenie (/) nájde celú časť jedného celého čísla delenú druhým. Napríklad:

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

Symbol percenta (%) označuje operáciu určenia zvyšku delenia dvoch celých čísel:

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

Ťažšie pochopiteľné operácie sú bitové operácie: & (AND), | (ALEBO), xor (exkluzívne OR),<< (побитовый сдвиг влево), >> (bitový posun doprava).

Bitové operácie AND, OR a XOR aplikujú zodpovedajúcu logickú operáciu na každý bit informácie:

  • 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 x alebo 3 10 = 01 2 x alebo 11 2 = 10 2

Pri spracovaní obrazu sa na farbu používajú 3 kanály: červený, modrý a zelený plus priehľadnosť, ktoré sú uložené v premennej int, pretože každý kanál má rozsah hodnôt od 0 do 255. V systéme hexadecimálnych čísel je určitá hodnota zapísaná takto: 0x180013FF; potom hodnota 18 16 zodpovedá červenému kanálu, 00 16 - modrý, 13 16 - zelený, FF - alfa kanál (priehľadnosť). Na výber konkrétneho kanála z takéhoto celého čísla sa používa takzvaný kanál. maska, kde pozície, ktoré nás zaujímajú, sú F 16 alebo 1 2. To znamená, že na zvýraznenie hodnoty modrého kanála musíte použiť masku, t.j. bitové A:

Int blue_channel = 0x180013FF & 0x00FF0000;

Potom sa výsledná hodnota posunie doprava o požadovaný počet bitov.

Bitový posun posunie číslo doľava alebo doprava o toľko binárnych číslic, koľko je uvedené na pravej strane operácie. Napríklad číslo 39 pre typ char sa zapíše binárne takto: 00100111. Potom:

Binárny znak Príklad = 39; // 00100111 výsledok znaku = binárny príklad<< 2; // сдвигаем 2 бита влево, результат: 10011100

Ak je premenná typu bez znamienka, výsledkom bude číslo 156, pre premennú sa rovná -100. Všimnite si, že pre typy celých čísel so znamienkom je jednotka v najvýznamnejšom bite bitovej reprezentácie znakom toho, že číslo je záporné. V tomto prípade hodnota v binárnom tvare pozostávajúca zo všetkých jednotiek zodpovedá -1; ak je 1 iba najvýznamnejšou číslicou a zostávajúce číslice sú nuly, potom má takéto číslo minimálnu hodnotu pre konkrétny typ: pre char je to -128.

2. Typ s pohyblivou rádovou čiarkou (float, double (float))

Sada hodnôt s pohyblivou rádovou čiarkou je podmnožinou reálnych čísel, ale nie každé reálne číslo je reprezentovateľné v binárnej forme, čo niekedy vedie k hlúpym chybám:

Float value = 0,2; hodnota == 0,2; // chyba, hodnota tu nebude rovná 0,2.

Pri práci s premennými s pohyblivou rádovou čiarkou by programátor nemal používať test rovnosti alebo nerovnosti, zvyčajne sa používa test na spadnutie do určitého intervalu:

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

Okrem porovnávacích operácií podporuje typ s pohyblivou rádovou čiarkou 4 aritmetické operácie, ktoré plne zodpovedajú matematickým operáciám s reálnymi číslami.

3. Booleovský (logický) typ (bool)

Pozostáva len z dvoch hodnôt: true (true) a false (false). Na prácu s premennými tohto typu sa používajú logické operácie: ! (NIE), == (rovnosť), != (nerovnosť), && (logické AND), || (logické ALEBO). Výsledok každej operácie možno nájsť v príslušnej pravdivostnej tabuľke. Napríklad:

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

4. Typ znaku (char, wchar_t)

Typ char nie je len celočíselný typ (zvyčajne sa tento typ nazýva bajt), ale aj typ znaku, ktorý ukladá číslo znaku z tabuľky ako znak ASCII. Napríklad kód 0x41 zodpovedá znaku 'A' a 0x71 - 't'.

Niekedy je potrebné použiť znaky, ktoré nie sú pevne stanovené v tabuľkách ASCII, a preto vyžadujú viac ako 1 bajt na uloženie. Je pre nich široký znak (wchar_t).

5.1. Polia

Polia vám umožňujú uložiť sekvenčnú množinu prvkov rovnakého typu. Pole je uložené v pamäti ako súvislý blok, takže pole nemôžete deklarovať bez zadania jeho veľkosti. Na deklarovanie poľa sa za názvom premennej označujúcim jej veľkosť napíšu hranaté zátvorky (). Napríklad:

Int myArray; // Pole 5 prvkov celočíselného typu

Ak chcete inicializovať pole, hodnoty sú uvedené v zložených zátvorkách. Týmto spôsobom môžete inicializovať iba v čase deklarácie premennej. Mimochodom, v tomto prípade nie je potrebné špecifikovať veľkosť poľa:

Int odds = (1, 3, 7, 9, 11); // Pole je inicializované s 5 hodnotami

Ak chcete získať prístup k určitej hodnote v poli (prvok poľa), použite operáciu prístupu k indexu () označujúcu číslo prvku (čísla začínajú od 0). Napríklad:

Kurzy; // prístup k prvému prvku poľa. Vráti hodnotu 1 kurz; // prístup k tretiemu prvku. Vráti hodnotu 7 kurz = 13; // Priraďte novú hodnotu 5. prvku poľa odds; // chyba prístupu

5.3. Struny

Na napísanie reťazca programátori používajú myšlienku, že reťazec je sekvenčný rad (pole) znakov. Na identifikáciu konca riadku použite špeciálny znak konca riadka: '\0'. Tieto špeciálne znaky, pozostávajúce zo spätnej lomky a identifikačného znaku, sa nazývajú riadiace alebo únikové znaky. Ďalej sú tam napríklad „\n“ – začiatok nového riadku, „\t“ – tab. Na zapísanie spätnej lomky v reťazci sa používa escape - ďalšia lomka sa umiestni pred samotný znak: „\“. Escapovanie sa používa aj na písanie úvodzoviek.

Vytvorme reťazcovú premennú:

Príklad textu znaku = ('T', 'e', ​​​​'s', 't', '\0'); // zapíše sa reťazec „Test“.

Pre inicializáciu reťazca existuje zjednodušený zápis:

Text znakuPríklad = “Test”; // Posledný znak nie je zapísaný, ale veľkosť je stále 5

Bez toho, aby sme zachádzali do podrobností, tu je ďalší užitočný dátový typ - reťazec. Struny
Tento typ možno pridať napríklad:

Reťazec ahoj = "Ahoj,"; názov reťazca = "Max!"; string ahoj_meno = ahoj + meno; // Získajte reťazec "Ahoj, Max!"

6. Odkaz

Int a = 2; // premenná "a" ukazuje na hodnotu 2 int &b = a; // premenná “b” ukazuje na to isté miesto ako “a” b = 4; // zmenou hodnoty b programátor zmení hodnotu a. Teraz a = 4 int & c = 4; // chyba, nemôžete to urobiť, pretože referencii nemožno priradiť hodnotu

7. Index

Aby ste pochopili tento typ údajov, musíte si uvedomiť, že mnohé hodnoty tohto typu sú adresy pamäťových buniek, kde údaje začínajú. Ukazovateľ tiež podporuje operácie sčítania (+), odčítania (-) a dereferencie (*).

Adresy 0x0 znamená, že ukazovateľ je prázdny, t.j. neukazuje na žiadne údaje. Táto adresa má svoj vlastný doslov - NULL:

Int *nullPtr = NULL; // nulový ukazovateľ

Pridanie a odčítanie adresy s celým číslom alebo inou adresou umožňuje
pohybovať po pamäti dostupnej pre program.

Operácia získavania údajov začínajúcich na adrese uloženej v ukazovateli sa nazýva dereferencovanie (*). Program načíta požadovaný počet pamäťových buniek a vráti hodnotu uloženú v pamäti.

Int hodnotaInMemory = 2; // nastavíme premennú celočíselného typu int *somePtr = // skopírujeme adresu premennej, sem & - vráti adresu premennej somePtr; // adresa pamäťovej bunky, napríklad 0x2F *somePtr; // hodnota je uložená v 4 bunkách: 0x2F, 0x30, 0x31 a 0x32

Operácia priradenia, ktorá je syntakticky rovnaká ako operácia kopírovania, nie je dostupná pre ukazovatele. Inými slovami, môžete skopírovať adresu iného ukazovateľa alebo adresu premennej, ale nemôžete určiť hodnotu adresy sami.

Samotný ukazovateľ je uložený v pamäti, rovnako ako hodnoty premenných iných typov, a zaberá 4 bajty, takže môžete vytvoriť ukazovateľ na ukazovateľ.

8. Prestupy

Enumerácie sú jediným základným typom definovaným programátorom. Celkovo je enumerácia usporiadaná množina pomenovaných celočíselných konštánt, pričom názov enumerácie je základným typom.

Farba enum (ČERVENÁ, MODRÁ, ZELENÁ);

Štandardne ČERVENÁ = 0, MODRÁ = 1, ZELENÁ = 2. Hodnoty je teda možné navzájom porovnávať, t.j. ČERVENÁ< BLUE < GREEN. Программист при объявлении перечисления может самостоятельно задать значения каждой из констант:

Enum prístup (READ = 1, WRITE = 2, EXEC = 4);

Často je vhodné použiť enumerácie, ktorých hodnoty sú mocniny dvoch, pretože v binárnom vyjadrení bude číslo, ktoré je mocninou 2, pozostávať z 1 a núl. Napríklad:

8 10 = 00001000 2

Výsledok sčítania týchto čísel vždy jasne ukazuje, ktoré čísla boli pridané:

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

Void

Syntakticky patrí typ void k základným typom, ale možno ho použiť len ako súčasť zložitejších typov, pretože Neexistujú žiadne objekty typu void. Tento typ sa zvyčajne používa na označenie, že funkcia nemá návratovú hodnotu, alebo ako základný typ ukazovateľa na objekty nedefinovaných typov:

Prázdny objekt; // chyba, neexistujú žiadne objekty typu void void // chyba, neexistujú žiadne odkazy na void void *ptr; // ok, ulož ukazovateľ na neznámy typ

Často používame void konkrétne na označenie, že funkcia nevracia žiadnu hodnotu. Ukazovateľ typu void sa používa, keď programátor preberá plnú zodpovednosť za integritu pamäte a správne pretypovanie.

Obsadenie

Často je potrebné preniesť hodnotu premennej jedného typu na iný. V prípade, že množina hodnôt pôvodného typu je podmnožinou väčšieho typu (napríklad int je podmnožinou long a long je double), kompilátor je schopný implicitne ( implicitne) zmeniť typ hodnoty.

int celé číslo = 2; float floating = celé číslo; // plávajúce = 2,0

Pretypovanie spätného typu sa vykoná so stratou informácií, takže zostane len celá časť čísla s pohyblivou rádovou čiarkou, zlomková časť sa stratí.

Existuje možnosť explicitnej konverzie typu, naľavo od premennej alebo akejkoľvek hodnoty pôvodného typu napíšte do zátvoriek typ, na ktorý sa vykoná pretypovanie:

Int hodnota = (int) 2,5;

Unárne a binárne operácie

Operácie, ktoré sme vykonali predtým, sa nazývajú binárne: vľavo a vpravo od symbolu operácie sú hodnoty alebo premenné, napríklad 2 + 3. Okrem binárnych operácií používajú programovacie jazyky aj unárne operácie, ktoré sa vzťahujú na premenné . Môžu byť umiestnené buď naľavo alebo napravo od premennej, s niekoľkými takýmito operáciami sa už vyskytlo - operácia dereferencovania (*) a preberanie adresy premennej (&) sú unárne. Operátory „++“ a „-“ zvyšujú a znižujú hodnotu celočíselnej premennej o 1 a môžu byť zapísané buď naľavo alebo napravo od premennej.

C++ používa skrátený zápis aj pre binárne operácie v prípade, keď ľavá a pravá strana výrazu obsahuje rovnakú premennú, t.j. nejaká operácia sa vykoná s hodnotou premennej a výsledok operácie sa uloží do tej istej premennej:

A+= 2; // rovnaké ako a = a + 2; b/= 5; // rovnaké ako b = b / 5; c = 3; // rovnaké ako c = c & 3;