c++ alapok

C++ változók és adattípusok

Eddig főként szöveggel dolgoztunk – most itt az idő, hogy számokat is tároljunk, számoljunk és mérjünk!

A számítógép minden adatot a memóriájában tárol. Ez a memória apró bitekből, bájtokból áll. 1 bájt = 8 bit

Egy bit lehet 0 vagy 1, tehát egyetlen biten kétféle értéket tudunk eltárolni. Ha több bitet teszünk egymás mellé, akkor az értékkombinációk száma mindig kétszereződik:

1 bit → 2ⁱ = 2 érték (0, 1)
2 bit → 2² = 4 érték (00, 01, 10, 11)
8 bit → 2⁸ = 256 érték → 1 bájt

Minél több bájtot foglalunk le egy változónak, annál nagyob vagy pontosabb számot tudunk vele ábrázolni. De nézzük pontosabban:

anime lány programozik és C++ változókat gyakorol a számítógép előtt

Egész típusok (integer types)

A programozásban nagyon gyakran van szükségünk egész számok tárolására – például életkorra, pontszámra, vagy éppen egy számláló értékére.
Ehhez a C++ több különböző „méretű dobozt” (típust) kínál: mindegyik egész értéket tárol, csak más tartományban.

Minél nagyobb a doboz (több bájt), annál nagyobb számokat tudsz benne elhelyezni.
Azonban a memória is értékes, ezért mindig a szükségesen legkisebb típust érdemes választani.

Típus Méret (legalább) Előjeles (signed) tartomány Előjel nélküli (unsigned) tartomány
char 1 bájt -128 … 127 0 … 255
short 2 bájt -32 768 … 32 767 0 … 65 535
int 4 bájt -2 147 483 648 … 2 147 483 647 0 … 4 294 967 295
long legalább 4 bájt rendszerfüggő rendszerfüggő
long long legalább 8 bájt nagyon nagy tartomány 🙂 még nagyobb

💡 Megjegyzés: a konkrét méretek platformfüggők. Kérdezd le: sizeof(char), sizeof(short), sizeof(int), sizeof(long), sizeof(long long).

C++ változók mérete bájtban és bitben – sizeof példaprogram képernyőképe

Char – a karaktertípus C++-ban

A char szó a character rövidítése, egy 1 bájtos (8 bites) adattípus. Ez azt jelenti, hogy:

👉 256 különböző értéket tud tárolni (0–255 vagy -128–127 típustól függően).
👉 Alapvetően egy karaktert reprezentál.

De itt jön a csavar: a char valójában egy pici egész szám de a kiíratásnál betűként jelenik meg. Ez a típus a karakter ASCII-kódját tárolja. Tehát ha azt írod ki:
char c = 97;
std::cout << c; akkor az a betűként fog megjelenni, mert a 97-es az ASCII táblában az a betű. Tehát ha számot teszel a char-ba, akkor az a hozzá tartozó karakterként fog megjelenni. 

  • Lehet vele egyetlen betűt is megjeleníteni, de akkor aposztróf közé kell tenni: char betu = ‘a’;
  • Ki lehet vele iratni az ASCII értéket is: 
    char c = ‘A’;
    std::cout << (int)c;
  • Lehet ezt is növelni eggyel:
    char x = ‘A’;
    x = x + 1;
    std::cout << x; -> ez esetben B-t kapunk, mert a B foglalja el a 66. helyet
  • Túlcsordulásnál (túlléped a határt) körbefordul, tehát ha 127-hez hozzáadsz char-ban egyet, akkor -128 lesz

Tehát a char egy 1 bájtos egész típus, ami ASCII kódot tárol (0-255 vagy -128-127), kiíratva karakterként jelenik meg, de lehet számként is használni. A legtöbb fordító signed char-t használ alapból (-128-127)

 

c++ változó túlcsordulás példája char típussal és negatív értékkel

Short típus

A short egy egész típus a C++-ban, ami kevesebb memóriát foglal, mint az int. Kisebb számok tárolására való – gyors, takarékos és szuper, ha nem kell óriási tartomány. 

A short legalább 2 bájt (16 bit), 16 biten pedig 2¹⁶ = 65 536 különböző érték ábrázolható.
Alapértelmezetten signed short a típusa (-32768 – + 32767 a tartománya), az unsigned short: 0 – 65535. 
Példa a használatára:

C++ változók – short típusú életkor bekérése és kiíratása példaprogramban

❌ Ne használd shortot, ha:

  • sokat számolsz rajta (CPU-n nincs előnye)

  • nagy pontosság kell

  • máshonnan kapott adatot tárolsz (pl. felhasználói bevitel → inkább int)

✔ Ilyenkor jó:

  • rengeteg kis számot tárolsz tömbben (memória spórolás)

  • alacsony szintű, bitközeli feladatok (pl. beágyazott rendszerek)

Természetesen ez is túlcsodul, ha a határán túli értéket adsz meg: 32767 + 1 -> -32768 lesz az unsigned shortnál pedig 65535 + 1 -> 0. 

Int típus

Az int a C++ alapértelmezett egész típusa — ha valaki azt mondja, hogy “számot tárolok”, 99%, hogy intre gondol.
Nem túl kicsi, nem túl nagy — épp elég minden hétköznapi számoláshoz: életkor, összegek, pontszámok, számlálók, hőmérséklet… minden, amit egy kezdő programozó valaha tárolni fog. 😄

A legtöbb rendszerben az int 4 bájt (32 bit), tehát:

  • signed int tartomány:
    −2 147 483 648 … +2 147 483 647

  • unsigned int tartomány:
    0 … 4 294 967 295

Mire jó az int? 

  • általános számolásokra

  • ciklusszámlálókhoz

  • összegek, darabszámok tárolására

  • menüpontok számához

  • pontszámokhoz

  • gyakorlatilag mindenhez, ami egész szám

Ha nem tudod, melyik egésztípust válaszd → int.
Ez az alapértelmezett, és a CPU is erre van optimalizálva, szóval gyors.

Az int is túl tud csordulni, csak ritkábban fordul elő, mert hatalmas a tartománya. Az, hogy nálad pontosan mekkora a sizeof paranccsal tudod lekérdezni: std::cout << sizeof(int) << ” bajt\n”;
A legtöbb gépen 4 bájt. 

Anime lány magyarázza a C++ változók működését egy számítógép előtt, barátságos tanulós környezetben.

Long típus – amikor az int már kicsi lesz

A long egy egész számokat tároló típus C++-ban, ami legalább akkorára van méretezve, mint az int — de sok rendszeren még nagyobb tartományt enged.

Minimum mérete: 4 bájt
Tartomány: rendszerfüggő (32 vagy 64 bites architektúrától függ)

A legtöbb modern 64 bites gépen:
➡️ signed long: −9 223 372 036 854 775 808 … +9 223 372 036 854 775 807
➡️ unsigned long: 0 … 18 446 744 073 709 551 615

Mire jó a long?

Ha olyan egész számokat akarsz tárolni, amelyek:

✨ nagyobbak, mint amit az int kezel
✨ de nem akarsz egyből long long-ra ugrani
✨ vagy platformfüggetlenül akarsz írni

Tipikus példák:

  • fájlméretek
  • nagy ciklus számlálók,
  • pénzügyi/kalkulációs adatok

Nézd meg, a te gépeden mekkora a long: 

C++ változók – long típus mérete bájtban és bitben kiírva a konzolra

Long long típus – ha igazán nagyon nagy szám kell

A long long a C++ egyik óriáskapacitású egész típusa. Ha az int kicsi, a long néha még pont elég…
…de amikor már brutál nagy számokkal kell számolni (banki műveletek, nagy számlálók, algoritmusok), akkor jön a megmentő: a long long

Mérete legalább 8 bájt, azaz 64 bit.  

Tartomány (signed long long)

  • −9 223 372 036 854 775 808

  • +9 223 372 036 854 775 807

Ez kb. 9 kvintillió — szóval simán elfér benne minden, ami a mindennapi programozásban előfordul.

Unsigned long long:

  • 0 – 18 446 744 073 709 551 615

Ezt is ellenőrizd le, nálad mekkora

„C++ változók – long long típus mérete kiírva a programban (8 bájt, 64 bit)”

Lebegőpontos típusok (float, double)

A lebegőpontos típusokat tört és valós számok ábrázolására használjuk. Nem egész számot akarsz? Erre van a float és a double kitalálva.

Float

Mérete 4 bájt, pontossága 6-7 számjegy. 
A tartomány nagyjából: ±10³⁸

Ez már jó arra, hogy: 

  • átlagokat számolj

  • százalékokat tárolj

  • gyors műveleteket végezz

  • kevésbé pontos számokra támaszkodj

Hátránya: veszít a pontosságából, a képen látszik, hogy a vége kicsit elcsúszik:

float pontosság demonstráció C++-ban – 1.0/3.0 kiíratása fixed és setprecision használatával | c++ változók

Mikor használjuk a float-ot?

 

  • ha kevés memória is számít (pl. játékfejlesztésnél rengeteg koordinátát tárolsz)

  • ha nem kell nagyon nagy pontosság

  • ha gyors számítások kellenek

De a legtöbb hétköznapi programban inkább a double lesz a nyerő. 

Double

Mérete 8 bájt, pontossága 15-16 számjegy
A tartománya nagyjából: ±10³⁰⁸

A legtöbb C++ programban a double az alapértelmezett választás, mert pontosabb, stabilabb, komolyabb számolásokhoz ez kell 

double pontosság demonstráció C++-ban – 1.0/3.0 kiíratása fixed és setprecision használatával | c++ változók

A double is lebegőpontos, ezért néhány számot nem tud teljesen pontosan ábrázolni – de sokkal kevésbé pontatlan, mint a float. 

Bool típus - igaz vagy hamis?

A bool (boolean) egy nagyon egyszerű, de mégis nagyon erős adattípus. Csak két értéke lehet: 

  • true – igaz – 1
  • false – hamis – 0

Ahhoz, hogy ne 1-et és 0-t írjon ki, hanem a true vagy false szavakat, használjuk a 
std::cout << std::boolalpha; kifejezést.

c++ változók bool típus kiírása boolalpha használatával

A bool egy bájtot foglal el, de belül egy sima szám. A használatát majd a logikai operátorok leckében bővebben megnézzük

 

Gratulálok! Végigmentél a C++ típusokon!

Mostanra már nem okoz gondot, hogy:

✔ tudd, mennyi memóriát foglal egy változó
✔ különbséget tegyél egész szám, lebegőpontos és logikai típus között
✔ felismerd, mikor lesz túlcsordulás
✔ használd a sizeof-ot és a formázott kiírást
✔ magabiztosan válassz megfelelő típust a feladathoz

Ez nagyon fontos alap, mert a következő leckéktől kezdve már igazi mini-programokat fogtok építeni!

Anime lány örül, hogy végzett a leckével – vidám jelenet színes pulcsiban, konfettivel, modern szobában | c++ változók

Ha szeretnél továbbhaladni a C++ anyagban, itt válogathatsz a leckék között: