User Tools

Site Tools


tanszek:oktatas:szamitastechnika:adat_tipusok

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
tanszek:oktatas:szamitastechnika:adat_tipusok [2026/10/21 17:35] – kneheztanszek:oktatas:szamitastechnika:adat_tipusok [2026/10/21 17:39] (current) – knehez
Line 69: Line 69:
 Az ''unsigned'' nem biztosít több bitet: a rendelkezésre álló bitmintázatokat más értéktartományhoz rendeli. Az ''unsigned'' nem biztosít több bitet: a rendelkezésre álló bitmintázatokat más értéktartományhoz rendeli.
  
-== Gyakori egész típusok ==+=== Gyakori egész típusok ===
  
 **Az alábbi méretek és tartományok gyakori megvalósításokat mutatnak, nem minden C-rendszerre érvényes előírások.** Kisebb mikrovezérlőkön például az ''int'' 16 bites is lehet. A táblázat előjeles tartományai kettes komplemens ábrázolásra vonatkoznak. **Az alábbi méretek és tartományok gyakori megvalósításokat mutatnak, nem minden C-rendszerre érvényes előírások.** Kisebb mikrovezérlőkön például az ''int'' 16 bites is lehet. A táblázat előjeles tartományai kettes komplemens ábrázolásra vonatkoznak.
Line 80: Line 80:
 | ''int'' | 4 | 32 | -2147483648 | 2147483647 | ''%d'' | | ''int'' | 4 | 32 | -2147483648 | 2147483647 | ''%d'' |
 | ''unsigned int'' | 4 | 32 | 0 | 4294967295 | ''%u'' | | ''unsigned int'' | 4 | 32 | 0 | 4294967295 | ''%u'' |
-| ''long'' | 4 vagy 8 | 32 vagy 64 | a megvalósítástól függ | a megvalósítástól függ | ''%ld'' | +| ''long'' | 4 vagy 8 | 32 vagy 64 | a compilertől függ | a compilertől függ | ''%ld'' | 
-| ''unsigned long'' | 4 vagy 8 | 32 vagy 64 | 0 | a megvalósítástól függ | ''%lu'' |+| ''unsigned long'' | 4 vagy 8 | 32 vagy 64 | 0 | a compilertől függ | ''%lu'' |
 | ''long long'' | 8 | 64 | -9223372036854775808 | 9223372036854775807 | ''%lld'' | | ''long long'' | 8 | 64 | -9223372036854775808 | 9223372036854775807 | ''%lld'' |
 | ''unsigned long long'' | 8 | 64 | 0 | 18446744073709551615 | ''%llu'' | | ''unsigned long long'' | 8 | 64 | 0 | 18446744073709551615 | ''%llu'' |
Line 89: Line 89:
 A ''long'' nem jelent automatikusan 64 bites számot. Gyakori 64 bites Windows-környezetben 32 bites, míg gyakori 64 bites Linux-környezetben 64 bites. A ''long'' nem jelent automatikusan 64 bites számot. Gyakori 64 bites Windows-környezetben 32 bites, míg gyakori 64 bites Linux-környezetben 64 bites.
  
-Az egyszerű ''char'' külön figyelmet igényel: előjelessége a megvalósítástól függ. Ha kifejezetten kis előjeles vagy előjel nélküli számot szeretnénk, írjunk ''signed char'' vagy ''unsigned char'' típust.+Az egyszerű ''char'' külön figyelmet igényel: előjelessége a compilertől függ. Ha kifejezetten kis előjeles vagy előjel nélküli számot szeretnénk, írjunk ''signed char'' vagy ''unsigned char'' típust.
  
 == Példa: darabszám és készletváltozás == == Példa: darabszám és készletváltozás ==
Line 103: Line 103:
 **A pozitívnak szánt mennyiséghez nem kötelező unsigned típust választani.** Kezdő programokban az ''int'' sok számlálási feladathoz megfelelő. Az ''unsigned'' típus nem ellenőrzi helyettünk, hogy egy kivonás eredménye negatív lenne-e; az előjeles és előjel nélküli típusok keverése pedig meglepő eredményt okozhat. **A pozitívnak szánt mennyiséghez nem kötelező unsigned típust választani.** Kezdő programokban az ''int'' sok számlálási feladathoz megfelelő. Az ''unsigned'' típus nem ellenőrzi helyettünk, hogy egy kivonás eredménye negatív lenne-e; az előjeles és előjel nélküli típusok keverése pedig meglepő eredményt okozhat.
  
-== Mi történik, ha nem fér el az eredmény? ==+=== Mi történik, ha nem fér el az eredmény? ===
  
 Egy típusnak véges az értéktartománya. Az előjeles egész művelet túlcsordulásának nincs a C nyelv által meghatározott eredménye. **Nem támaszkodhatunk arra, hogy a legnagyobb pozitív szám után a legkisebb negatív következik.** Egy típusnak véges az értéktartománya. Az előjeles egész művelet túlcsordulásának nincs a C nyelv által meghatározott eredménye. **Nem támaszkodhatunk arra, hogy a legnagyobb pozitív szám után a legkisebb negatív következik.**
Line 116: Line 116:
 Ekkor a változó új értéke 0. Az összeadás itt előbb ''int'' típusban adja a 256-ot, majd az ''unsigned char'' típusba történő visszaalakítás eredménye 0 lesz. Ekkor a változó új értéke 0. Az összeadás itt előbb ''int'' típusban adja a 256-ot, majd az ''unsigned char'' típusba történő visszaalakítás eredménye 0 lesz.
  
-Mérnöki programban a körbefordulás gyakran hibás számlálást eredményez. A típust ezért a várható legnagyobb érték és a köztes számítások alapján válasszuk ki.+A programban a körbefordulás gyakran hibás számlálást eredményez. A típust ezért a várható legnagyobb érték és a köztes számítások alapján válasszuk ki.
  
 === Lebegőpontos típusok === === Lebegőpontos típusok ===
Line 156: Line 156:
 A ''long double'' nem feltétlenül pontosabb a ''double'' típusnál. Egyes környezetekben azonos a két típus pontossága. A memóriában elfoglalt méretből önmagában nem állapítható meg a pontosság: a tárolás kitöltő bájtokat is tartalmazhat. A ''long double'' nem feltétlenül pontosabb a ''double'' típusnál. Egyes környezetekben azonos a két típus pontossága. A memóriában elfoglalt méretből önmagában nem állapítható meg a pontosság: a tárolás kitöltő bájtokat is tartalmazhat.
  
-== Melyiket használjuk mérnöki számításhoz? ==+=== Melyiket használjuk mérnöki számításhoz? ===
  
 **Általános mérnöki számításoknál jó alapválasztás a double.** **Általános mérnöki számításoknál jó alapválasztás a double.**
Line 164: Line 164:
 A számítás pontosságát nem csak a választott típus, hanem a mérési adatok minősége és az alkalmazott számítási módszer is befolyásolja. A számítás pontosságát nem csak a választott típus, hanem a mérési adatok minősége és az alkalmazott számítási módszer is befolyásolja.
  
-== Példa: mérési felbontás nagy értéknél ==+=== Példa: mérési felbontás nagy értéknél ===
  
 A szokásos 32 bites ''float'' az 100000000 környezetében már nem tud minden egész számot külön ábrázolni. A szokásos 32 bites ''float'' az 100000000 környezetében már nem tud minden egész számot külön ábrázolni.
Line 197: Line 197:
 Az ''f'' utótag ''float'' típusú számállandót jelöl. Utótag nélkül az ilyen lebegőpontos számállandó ''double'' típusú. Például ''1.5f'' típusa ''float'', ''1.5'' típusa ''double''. Az ''f'' utótag ''float'' típusú számállandót jelöl. Utótag nélkül az ilyen lebegőpontos számállandó ''double'' típusú. Például ''1.5f'' típusa ''float'', ''1.5'' típusa ''double''.
  
-Sok hétköznapi tizedes tört, például a 0.1, kettes számrendszerben nem írható le véges számú számjeggyel. Ezért lebegőpontos tároláskor kerekítésre lehet szükség. A ''double'' is véges pontosságú, és önmagában nem szünteti meg ezt a jelenséget.+Korábban már bemutattuk, hogy sok hétköznapi tizedes tört, például a 0.1, kettes számrendszerben nem írható le véges számú számjeggyel. Ezért lebegőpontos tároláskor kerekítésre lehet szükség. A ''double'' is véges pontosságú, és önmagában nem szünteti meg ezt a jelenséget.
  
 === A művelet típusa is számít === === A művelet típusa is számít ===
Line 396: Line 396:
   - 8, mert az átalakítás nulla felé csonkol.   - 8, mert az átalakítás nulla felé csonkol.
   - Két tizedesjegyet ír ki; a tárolt érték nem változik meg.   - Két tizedesjegyet ír ki; a tárolt érték nem változik meg.
-  - Nem. A ''long'' mérete a megvalósítástól függ.+  - Nem. A ''long'' mérete a compilertől függ.
   - A nagy érték környezetében az ábrázolható szomszédos számok közötti távolság meghaladhatja a növekményt.   - A nagy érték környezetében az ábrázolható szomszédos számok közötti távolság meghaladhatja a növekményt.
  
tanszek/oktatas/szamitastechnika/adat_tipusok.1792604118.txt.gz · Last modified: by knehez