bevezetés a programozásba

9
2009 Bevezetés a programozásba Krankovits Melinda

Upload: robyn

Post on 13-Jan-2016

30 views

Category:

Documents


0 download

DESCRIPTION

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. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Bevezetés a programozásba

2009

Bevezetés a programozásba

Krankovits Melinda

Page 2: Bevezetés a programozásba

2

Széchenyi István Egyetem

Bit szintű operátorok ( ~, <<, >>, &, ^ és |)

Műveletek és kifejezésekProgramozá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ésAz operátor előbb végrehajtja az egész–előléptetést, ha szükséges. Azeredmény típusa az operandus konverzió utáni típusa. Az eredmény magaa bit szintű egyes komplemens, azaz ahol az operandus bit 1 volt, ott azeredmény bit 0 lesz, és ahol az operandus bit 0 volt, ott az eredmény bit 1lesz. 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.

A bit szintű operátorok csak signed és unsigned egész típusú adatokra:char, short, int és long használhatók.

Page 3: Bevezetés a programozásba

3

Széchenyi István Egyetem

Bit szintű operátorok ( ~, <<, >>, &, ^ és |)

Műveletek és kifejezésekProgramozás C nyelven

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 operandusmeghatároz.

A K1<<K2 balra tolja K1 értékét K2 bitpozícióval úgy, hogy jobbról 0bitek jönnek be.

A K1>>K2 művelet K1 értékét K2 bitpozícióval tolja jobbra. Ha K1 valamilyenunsigned 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 K1eseté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 << é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.

Page 4: Bevezetés a programozásba

4

Széchenyi István Egyetem

Bit szintű operátorok ( ~, <<, >>, &, ^ és |)

Műveletek és kifejezésekProgramozás C nyelven

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

Eltolás példa:

Page 5: Bevezetés a programozásba

5

Széchenyi István Egyetem

Bit szintű operátorok ( ~, <<, >>, &, ^ és |)

Műveletek és kifejezésekProgramozá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ó tekintettelprioritásuk magasabb a kétoperandusos logikai operátorokénál, dealacsonyabb a relációkénál.

Page 6: Bevezetés a programozásba

6

Széchenyi István Egyetem

Bit szintű operátorok ( ~, <<, >>, &, ^ és |)

Műveletek és kifejezésekProgramozás C nyelven

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.

Page 7: Bevezetés a programozásba

7

Széchenyi István Egyetem

Bit szintű operátorok ( ~, <<, >>, &, ^ és |)

Műveletek és kifejezésekProgramozá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 (1 .. 65535) : "); num = 0; fflush(stdin);} }

Page 8: Bevezetés a programozásba

8

Széchenyi István Egyetem

Hozzárendelés operátorok = *= /= %= += -= &= ^= |= <<= >>=

Műveletek és kifejezésekProgramozás C nyelven

Van tehát egyszerű hozzárendelés operátor (=) és vannak összetettekvagy 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ésformájú használatát is, amikor is a kifejezés kiértékelése után jobbról balrahaladva az operandusok felveszik a kifejezés értékét. Az egész konstrukcióértéke most is a kifejezés értéke lesz.

Page 9: Bevezetés a programozásba

9

Széchenyi István Egyetem

Hozzárendelés operátorok = *= /= %= += -= &= ^= |= <<= >>=

Műveletek és kifejezésekProgramozá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 ajobb oldali operandus köteles egész típusú lenni.