2009 Bevezetés a programozásba Krankovits Melinda
Széchenyi István Egyetem 2 Bit szintű operátorok ( ~, >, &, ^ és |) Műveletek és kifejezések Programozás C nyelven Legmagasabb prioritási szinten az egyoperandusos, jobbról balra kötő egyes komplemens operátor (~) van, melynek definíciója: ~ előtag-kifejezés Az operátor előbb végrehajtja az egész–előléptetést, ha szükséges. Az eredmény típusa az operandus konverzió utáni típusa. Az eredmény maga a bit szintű egyes komplemens, azaz ahol az operandus bit 1 volt, ott az eredmény bit 0 lesz, és ahol az operandus bit 0 volt, ott az eredmény bit 1 lesz. Feltéve, hogy az egész–előléptetés 16 bites, és hogy: unsigned short x = 0XF872, /* */ maszk = 0XF0F0;/* */, akkor a ~x , és a ~maszk A bit szintű operátorok csak signed és unsigned egész típusú adatokra: char, short, int és long használhatók.
Széchenyi István Egyetem 3 Bit szintű operátorok ( ~, >, &, ^ és |) Műveletek és kifejezések Programozás C nyelven A balról jobbra csoportosító eltolás operátorok ( >) prioritása alacsonyabb az aritmetikai műveletekénél, de magasabb, mint a reláció operátoroké. Az eltolás operátorok első operandusuk értékét balra (<<) vagy jobbra (>>) tolják annyi bitpozícióval, mint amennyit a második operandus meghatároz. A K1<<K2 balra tolja K1 értékét K2 bitpozícióval úgy, hogy jobbról 0 bitek jönnek be. A K1>>K2 művelet K1 értékét K2 bitpozícióval tolja jobbra. Ha K1 valamilyen unsigned típusú, akkor balról 0 bitek jönnek be. Ha K1 signed, akkor az operátor az előjel bitet sokszorozza. unsigned, nem negatív K1 esetén a jobbra tolás K1/2K2 hányados egész részeként is interpretálható. Miután a C–ben nincs egész alul vagy túlcsordulás, a > műveletek értékvesztést is okozhatnak, ha az eltolt eredmény nem fér el az első operandus konvertált típusában.
Széchenyi István Egyetem 4 Bit szintű operátorok ( ~, >, &, ^ és |) Műveletek és kifejezések Programozás C nyelven unsigned short x = 0XF872, /* */ maszk = 0XF0F0;/* */, akkor a ~x , és a ~maszk , akkor x > Eltolás példa:
Széchenyi István Egyetem 5 Bit szintű operátorok ( ~, >, &, ^ és |) Műveletek és kifejezések Programozás C nyelven A művelet bitről-bitre valósul meg az operandusok értékén, s egy bitre vonatkoztatva az eredmény így néz ki: A bit szintű logikai operátorok prioritásuk csökkenő sorrendjében az és (&), a kizáró vagy (^), valamint a vagy (|). A többi műveletre való tekintettel prioritásuk magasabb a kétoperandusos logikai operátorokénál, de alacsonyabb a relációkénál.
Széchenyi István Egyetem 6 Bit szintű operátorok ( ~, >, &, ^ és |) Műveletek és kifejezések Programozás C nyelven Példa bitszintű logikai operátorokra: unsigned short x = 0XF872, /* */ maszk = 0XF0F0;/* */, akkor a ~x , és a ~maszk , akkor x > , az x|maszk értéke Állíthatjuk, hogy az eredményben minden olyan bit egy, ami a maszk–ban az volt. Az x^x eredménye biztosan tiszta zérus., az x&~maszk értéke
Széchenyi István Egyetem 7 Bit szintű operátorok ( ~, >, &, ^ és |) Műveletek és kifejezések Programozás C nyelven Összetett példa: binaris.c … num=0; while ( (c=getchar()) !=EOF ) { if ( c!='\n' && c>='0' && c<='9' ) {/* ASCII - bin ris konverzi˘ */ num = num*10 + c - '0'; } else {/* a sz m v‚ge */ printf("%u sz m bin risan : ", num); for (i=16; i>0; i--) { bit = num >> 15 ; /* a vezet‹ bit a v‚g‚re kerl */ bit = bit + '0' ; /* a 0 vagy 1 ir sjel el‹ llˇt sa */ putchar(bit); num = num << 1; /* a k”vetkez‹ bit a vezet‹ helyre kerl */ } putchar('\n'); printf("\nG‚pelj be egy pozitˇv sz mot ( ) : "); num = 0; fflush(stdin); }
Széchenyi István Egyetem 8 Hozzárendelés operátorok = *= /= %= += -= &= ^= |= >= Műveletek és kifejezések Programozás C nyelven Van tehát egyszerű hozzárendelés operátor (=) és vannak összetettek vagy kombináltak (ezek a többiek). A K1 = K2 kifejezésben K1-nek módosítható balértéknek kell lennie. (megjegyzés: jobbérték fogalma!) A definíció megengedi a hozzárendelés operátor K1 = K2 = K3 =... = Kn = kifejezés formájú használatát is, amikor is a kifejezés kiértékelése után jobbról balra haladva az operandusok felveszik a kifejezés értékét. Az egész konstrukció értéke most is a kifejezés értéke lesz.
Széchenyi István Egyetem 9 Hozzárendelés operátorok = *= /= %= += -= &= ^= |= >= Műveletek és kifejezések Programozás C nyelven Kombinált operátorok: … for(ft=ALSO; ft<=FELSO; ft=ft+LEPES) /*Most így írható*/ for(ft=ALSO; ft<=FELSO; ft+=LEPES) Megjegyzés: A += és –= bal oldali operandusa mutató is lehet, amikor is a jobb oldali operandus köteles egész típusú lenni.