1 / 9

Bevezetés a programozásba

Bevezetés a programozásba. Krankovits Melinda. Programozás C nyelven. Műveletek és kifejezések. Bit szintű operátorok ( ~, <<, >>, &, ^ és |). A bit szintű operátorok csak signed és unsigned egész típusú adatokra: char , short , int és long használhatók.

robyn
Download Presentation

Bevezetés a programozásba

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. Bevezetés a programozásba Krankovits Melinda 2009

  2. Programozás C nyelven Műveletek és kifejezések Bit szintű operátorok ( ~, <<, >>, &, ^ és |) A bit szintű operátorok csak signed és unsigned egész típusú adatokra: char, short, int és long használhatók. 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, /* 1111100001110010 */ maszk = 0XF0F0;/* 1111000011110000 */ , akkor a ~x 00000111100011012, és a ~maszk 00001111000011112.

  3. Programozás C nyelven Műveletek és kifejezések Bit szintű operátorok ( ~, <<, >>, &, ^ és |) Miután a C–ben nincs egész alul vagy túlcsordulás, a << és >>műveletek értékvesztést is okozhatnak, ha az eltolt eredmény nem fér el az első operandus konvertált típusában. A balról jobbra csoportosító eltolás operátorok (<< és >>) 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ó.

  4. Programozás C nyelven Műveletek és kifejezések Bit szintű operátorok ( ~, <<, >>, &, ^ és |) Eltolás példa: unsigned short x = 0XF872, /* 1111100001110010 */ maszk = 0XF0F0;/* 1111000011110000 */ , akkor a ~x 00000111100011012, és a ~maszk 00001111000011112. , akkor x<<2 11100001110010002, ill. a maszk>>5 00000111100001112

  5. Programozás C nyelven Műveletek és kifejezések Bit szintű operátorok ( ~, <<, >>, &, ^ és |) 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. 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:

  6. Programozás C nyelven Műveletek és kifejezések Bit szintű operátorok ( ~, <<, >>, &, ^ és |) Példa bitszintű logikai operátorokra: unsigned short x = 0XF872, /* 1111100001110010 */ maszk = 0XF0F0;/* 1111000011110000 */ , akkor a ~x 00000111100011012, és a ~maszk 00001111000011112. , akkor x<<2 11100001110010002, ill. a maszk>>5 00000111100001112 , az x|maszk értéke 11111000111100102. Á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 00001000000000102.

  7. Programozás C nyelven Műveletek és kifejezések Bit szintű operátorok ( ~, <<, >>, &, ^ és |) Ö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 kerl */ 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 kerl */ } putchar('\n'); printf("\nG‚pelj be egy pozitˇv sz mot (1 .. 65535) : "); num = 0; fflush(stdin); } }

  8. Programozás C nyelven Műveletek és kifejezések Hozzárendelés operátorok = *= /= %= += -= &= ^= |= <<= >>= 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.

  9. Programozás C nyelven Műveletek és kifejezések Hozzárendelés operátorok = *= /= %= += -= &= ^= |= <<= >>= 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.

More Related