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:
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).
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)
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:
❌ 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.
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:
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
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:
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
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.
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!






