1 / 19

Témák:

Programozás alapjai GEIAL 3 12 B (ANSI C) BSc (Bachelor of Science) / Alap képzés 200 5 /200 6 . őszi f élév Miskolci Egyetem Általános Informatikai Tanszék. Témák:. Operátorok Kiértékelés Konverzió. prec1. Elsődleges operátorok. () kifejezés kiértékelési sorrendjének előírása

lona
Download Presentation

Témák:

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programozás alapjai GEIAL312B(ANSI C)BSc (Bachelor of Science) / Alap képzés2005/2006. őszi félévMiskolci Egyetem Általános Informatikai Tanszék

  2. Témák: • Operátorok • Kiértékelés • Konverzió

  3. prec1. Elsődleges operátorok () kifejezés kiértékelési sorrendjének előírása a * ( x + y ) [] tömbelem hivatkozás a [ i + 2 ] -> struktúra mező hivatkozás struktúrára mutató pointerrel hallg_strukt_mut -> nev . struktúra mező hivatkozás hallgato . nev

  4. prec2. Egyoperandusú operátorok 1. (tipus) cast, kikényszerített típus konverzió (double) k sizeof változó, típus memória mérete: byte sizeof(i) sizeof(int) & változó címe &y * visszahivatkozás egy adott címen tárolt aktuális értékre *(&y)

  5. prec2. Egyoperandusú operátorok 2. + előjel (a szimmetria kedvéért) - előjel a = 4 - - x; a = 4 - (-x); ++ növelés 1 egységgel, előtagos, utótagos ++i j++ -- csökkentés 1 egységgel ~ bitenkénti komplemens ! logikai tagadás (relációs, logikai kifejezés: 0 ha hamis, 1 ha igaz)

  6. prec3. Multiplikatív operátorok * szorzás / osztás 5/2 2 -5/2 -2 vagy -3 (fordítótól függ) megoldás: (float) 5/-2 % modulo (maradékos osztás, csak int típusra) -5%2 -1 vagy 1 (gépfüggő) megoldás: abs(-5%2)

  7. prec4. Additív operátorok + összeadás - kivonás

  8. prec5. Eltolás, léptetés << balra tolás, üres helyet 0-val tölt x<<2 (szorzás néggyel) >> jobbra tolás, üres helyet unsigned: 0-val signed: 1-gyel vagy 0-val tölt y>>3 (osztás 8-cal)

  9. prec6. Relációs operátorok > >= < <= Az eredmény int típusú: 0 ha hamis 1 ha igaz i < 5*j i < (5*j) (a zárójel felesleges) Megj.: aritmetikai kifejezés ha 0, akkor hamis, különben igaz

  10. prec7. Egyenlőség operátorok == egyenlő (gyakori hiba!) != nem egyenlő

  11. prec8-10. Bitenkénti műveletek & bitenkénti ÉS (AND) n=n & 0177 (az utolsó 7 bit kivételével nulláz) 0177=127=0000000001111111 ^ bitenkénti kizáró VAGY (XOR) 1 ha különböznek a bitek 0 ha megegyeznek a bitek | bitenkénti VAGY (OR) n=n|010 (jobbról a negyedik bit 1 lesz)

  12. prec11-12. Logikai ÉS, VAGY műveletek && logikai ÉS (AND) || logikai VAGY (OR) Pl.: ha x=1 és y=2, akkor x & y értéke 0, mert x ...001 y …010 x&&y értéke 1 (igaz) Megj.: a kiértékelés félbeszakad, ha megvan az eredmény!

  13. prec13. Feltételes kifejezés feltétel ? igaz_eset : hamis_eset (ternary, három operandusú művelet) Pl. a=(b<5) ? -5 : 12; ha b=1, akkor a=-5 ha b=8, akkor a=12

  14. prec14. Értékadási műveletek változó (operátor) = kifejezés egyenértékű a változó = változó (operátor) kifejezés -sel Az operátor lehet: +, -, *, %, /, &, ^, |, <<, >> Előnye, hogy változó csak egyszer értékelődik ki. Pl. x*=y+1; -> x=x*(y+1); és nem x=x*y+1;

  15. prec15. Kifejezés lista kif1 , kif2 , kif3, ... Kiértékelés balról jobbra, értéke az utoljára kiértékelt kifejezés értéke.

  16. Egyoperandusú operátorok mellékhatásai Pl. i=0; a=b[i++]; /* a=b[0] és i=1 */ vagy i=0; a=b[++i]; /* a=b[1] és i=1 */ Makróknál: #define min(a,b) (a<b ? a : b) ... i=0; j=min(i++,5); /* j=(i++<5 ? i++ : 5) */ ( i=2 és j=1 lesz )

  17. Kifejezések kiértékelési sorrendje Precedencia szabály az előbbiek szerint. A && || ?: , operátorok kivételével nem meghatározott az operandusok kiértékelési sorrendje. Pl. x=f(x)+g(y); vagy printf("%d%d\n",++n,negyzet(n)); vagy a[i]=i++; A sorrendet a fordítóprogram dönti el (optimalizálás). Megoldás: segédváltozó alkalmazása.

  18. Kifejezések típus konverziója A különböző típusú operandusokat a művelet végrehajtása előtt közös típusra kell alakítani. Automatikus: keskenyebb -> szélesebb Pl. x+i x float, i egész esetén az i -> float A char és az int szabadon keveredhet: char -> int int -> char esetén túlcsordulás lehet. Pontos eljárás a K&R könyvben.

  19. Konverzió értékadáskor A jobboldal a bal típusára konvertálódik. A karakter mindig egésszé. long -> int, short, char (magasabb bitek elvesznek) float -> int (törtrész elvész) double -> float (kerekít vagy levág!) Kényszerített típusmódosítás: Pl. int n; x=sqrt((double) n);

More Related