bevezetés a programozásba
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 PresentationTRANSCRIPT
2009
Bevezetés a programozásba
Krankovits Melinda
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.
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.
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:
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.
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.
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);} }
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.
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.