Sunteți pe pagina 1din 20

Limbaje deprogramare

Cursul VI

Limbaje deprogramare Conf.dr.L. STOLERIU LSTOLER@UAIC.RO

Conversialantreg Conversia la ntreg


char, short, char short signed sau unsigned pot fi folosite n orice expresie unde pot fi folosite int sau unsigned int. Dac toate valorile tipului original pot fi reprezentate p g p p de un int, atunci valoarea acesteia se va converti la int; altfel se va converti la unsigned int. Aceasta se numete conversie l t t i la ntreg.

Limbaje deprogramare Conf.dr.L. STOLERIU LSTOLER@UAIC.RO

Conversiiaritmeticeuzuale Conversii aritmetice uzuale


Conversiile aritmetice pot apare cnd sunt evaluai operanzii unui operator binar: Presupunemc i esteint if esteunfloat.nexpresia i+f,i seconvertetelafloatiar i+f vantoarcetipulfloat. p

Limbaje deprogramare Conf.dr.L. STOLERIU LSTOLER@UAIC.RO

Conversiiaritmeticeuzuale Conversii aritmetice uzuale


dac unoperandlong double >cellaltconvertitlalong double altfel,dac unoperanddouble >cellaltconvertitladouble altfel,dac unoperandfloat > cellaltconvertitlafloat ltf l d d fl t ll lt tit l fl t altfel /*****aulocconversiilelaintreg*****/ dac un operand unsigned long > cellalt devine unsigned long unoperandunsigned >cellaltdevine altfel,dac unoperandlong I cellaltunsigned atunci >dac long inetoatevalorileunsigned >unsigned devine long >dac long nuine toatevalorileunsigned >ambiidevinunsigned long altfel,dac unoperandlong >cellaltconvertitlalong altfel,dac unoperand unsigned > cellaltconvertitlaunsigned lf l d d i d ll l i l i d altfel ambiioperanzivoraveatipulint

Limbaje deprogramare Conf.dr.L. STOLERIU LSTOLER@UAIC.RO

Conversiiexplicite Conversii explicite


Dac iint,atunci
(double) i

vaconvertivaloarealuiiastfelnctexpresias aib tipul double.Variabilairmneneschimbat.


(long) ('A' + 1.0) x = (float) ((int) y + 1) (double) (x = 77)

Operatoruldeconversiedetip(cast)esteoperatorunar careareaceeasiprioritateiasociativitate(deladreaptala care are aceeasi prioritate i asociativitate (de la dreapta la stanga)ca operatorii unari.
(float) i+3 esteechivalentcu((float) i)+3
5 Limbaje deprogramare Conf.dr.L. STOLERIU LSTOLER@UAIC.RO

Tipurienumerate Tipuri enumerate


Pentrudeclarareatipurilorenumeratesefolosetecuvntul rezervatenum.Acestavaimplicadenumireamulimiii rezervat enum Acesta va implica denumirea mulimii i enumerareaelementelorcaelementealemulimii.
enum zile {luni, marti, miercuri, joi, vineri, sambata, duminica};

Aceastdeclaraiecreeaztipulutilizator enum zile. Enumeratorii(sauelementele)suntidentificatoriiluni, marti,... .Acesteasuntconstanteint.Princonvenie, primuleste0,iapoirestulsuntincrementai.

Declarareavariabilelordetipenum zile:
enum zile zi1, zi2; il i1 i2

Variabilelezi1izi2potfifolositedeexempluca:
zi1 = miercuri;
6 Limbaje deprogramare Conf.dr.L. STOLERIU LSTOLER@UAIC.RO

Tipurienumerate Tipuri enumerate


enum carti {trefla = 1, caro, frunza, inima} a, b, c;

Dinmomentcetrefla esteiniializatcu1,rezultcaro, frunza iinima iniializatecu2,3,4.


enum fructe {mere = 7, pere, portocale = 3, lamai} nr_frct;

pere vafiiniializatcu8,iarlamai cu4. Numeletipuluienumerarepoatelipsi,nsatuncinumai N l ti l i t li i t i i putemdeclaraaltevariabiledeaceltip.


enum {plop, molid, brad} copaci;

Singuravariabildetipenum {plop, molid, brad} estecopaci (nusemaipoatedeclaraalta). p ( p )


7 Limbaje deprogramare Conf.dr.L. STOLERIU LSTOLER@UAIC.RO

typedef
Cpuneladispoziiefacilitateatypedef pentru redenumireatipurilordejaexistente. redenumirea tipurilor deja existente
typedef int culoare; culoare rosu, verde, albastru;

Acestadefinetetipulculoare cafiindunsinonimallui int.Apoideclarmtreivariabiledetipulculoare. Utilpentruacretelizibilitateaprogramului.

Limbaje deprogramare Conf.dr.L. STOLERIU LSTOLER@UAIC.RO

typedef typedef
Sepotfolosiicasturi pentruvariabileledefinitecu yp typedef. Deexemplu:
enum zile {duminica, luni, marti, miercuri, joi, vineri, sambata}; yp ; typedef enum zile zi; zi o_funcie(zi z) Ce face aceast { funcie? return ((zi)(((int) z + 1) % 7)); }
9 Limbaje deprogramare Conf.dr.L. STOLERIU LSTOLER@UAIC.RO

Expresiiioperatoripebii Expresii i operatori pe bii


Operatoriipebiilucreazcuexpresiintregireprezentate ca u de c e b a e cairuridecifrebinare.
Complement pe bit (unar) Si pe bit Sau exclusiv pe bit ( ) pe Sau (inclusiv) p bit Deplasare stnga Deplasare dreapta ~ & ^ | << >>

Operatorul~esteunar,restuloperatorilorsuntbinarisi lucreazdoarcutipuriintregi. lucreaz doar cu tipuri intregi.


10 Limbaje deprogramare Conf.dr.L. STOLERIU LSTOLER@UAIC.RO

~
Operatorul~senumeteoperatordecomplement(sau ope ato de co p e e t pe b t) cesta ve sea operatordecomplementpebit). Acestainverseaz reprezentareairuluipebii,adic0devine1i1devine0.
short a = 5171; 1 1

Reprezentareabinaraluia este:
00010100 00110011

Expresia~a este:
11101011 11001100

Adic:
- 5172 sau 60364

11

Limbaje deprogramare Conf.dr.L. STOLERIU LSTOLER@UAIC.RO

Complementuluifa dedoi Complementului fa de doi


Reprezentareacomplementuluifatadedoiaunuinumr naturalesteunirdebiiobinutprincomplementarierea natural este un ir de bii obinut prin complementarierea scrieriiluinnbaza2.Complementulpebiialluinlacare adunam1,dcomplementuluifadedoialuin. Omaincareutilizeazreprezentareacomplementului fadedoicareprezentarebinarnmemoriepentruvalori integralesenumetemaincomplementfadedoi. i t l t i l t f d d i Operaiaa besteaceeaicua+(b),undeb seobine considerndcomplementulpebiialluiblacareadunm1. considernd complementul pe bii al lui b la care adunm 1

12

Limbaje deprogramare Conf.dr.L. STOLERIU LSTOLER@UAIC.RO

Operatorilogicipebii Operatori logici pe bii


Ceitreioperatori&(i),^(sauexclusiv)i|(sauinclusiv) suntbinari.Operanziisuntoperaibitcubit. sunt binari Operanzii sunt operai bit cu bit
a 0 1 0 1 b 0 0 1 1 a&b 0 0 0 1 a^b 0 1 1 0 a|b 0 1 1 1

13

Limbaje deprogramare Conf.dr.L. STOLERIU LSTOLER@UAIC.RO

Operatorilogicipebii Operatori logici pe bii


short a = 3333, b = 7777;
Expresie a b a&b a^b a|b ~(a | b) (~a & ~b)
14

Reprezentare 00001101 00000101 00011110 01100001 00001100 00000001 00010011 01100100 00011111 01100101 11100000 10011010 11100000 10011010

Valoare 3333 7777 3073 4964 8037 -8038 -8038

Limbaje deprogramare Conf.dr.L. STOLERIU LSTOLER@UAIC.RO

Operatoridedeplasare Operatori de deplasare


Ceidoioperanziaiunuioperatordedeplasaretrebuiesfie expresiintregi.Tipulreturnatdeexpresieestedatde expresii ntregi Tipul returnat de expresie este dat de operanduldinstnga.
expresie1 << expresie2

facecareprezentareapebiipentruexpresie1 sfie deplasatctrestngacuunnumrdepoziiispecificatde expresie2.ncaptuldindreapta,vorfiadugate0uri. expresie2 n captul din dreapta vor fi adugate 0 uri

15

Limbaje deprogramare Conf.dr.L. STOLERIU LSTOLER@UAIC.RO

Operatoridedeplasare Operatori de deplasare


Chiardacvaloarealui"c"sememoreazpeunoctet,ntro expresieaceastaiatipulint. expresie aceasta ia tipul int Decivaloareaexpresiilorc << 1,c << 4 ic << 15 sememoreazpedoioctei.
Expresie c c << 1 c << 4 c << 15 Reprezentare 01011010 10110100 10100000 00000000

16

Limbaje deprogramare Conf.dr.L. STOLERIU LSTOLER@UAIC.RO

Operatoridedeplasare Operatori de deplasare


Operatoruldedeplasareladreapta>> nuestechiar simetriccu<<.Pentruexpresiileintegralefrsemn,din simetric cu << Pentru expresiile integrale fr semn din stngasevacompletacu0,iarpentrucelecusemnseva completacu1!
short unsigned short
Expresie a a >> 3 b b >> 3
17

a = 1 << 15; b = 1 << 15;


Valoare -32768 -4096 32768 4096

Reprezentare 10000000 00000000 11110000 00000000 10000000 00000000 00010000 00000000

Limbaje deprogramare Conf.dr.L. STOLERIU LSTOLER@UAIC.RO

Mti
Omascesteoconstantfolositpentruextragereabiilor do d t o a t va ab sau e p es e doriidintroaltvariabilsauexpresie. Dinmomentceint 1 este:
00000000 00000001

poatefifolositpentrudeterminareabituluicelmai nesemnificativ:
int i, masca = 1; for (i = 0; i < 10; i++) printf("%d \n", i & masca);

Dacdorimsgsimvaloareaunuianumebit dintroexpresie,putemfolosiunirbinarceare1nacea p poziiei0nrest.


18 Limbaje deprogramare Conf.dr.L. STOLERIU LSTOLER@UAIC.RO

Mti
Putem folosi 1<<4pentru avedea alcincilea bitdin d eapta p es a dreapta.Expresia
((v & (1 << 4)) >> 3) ? 1 : 0

arevaloarea 1sau 0dup cumeste albitul5 dinv. Altexemplu demasc este constanta 255
00000000 11111111

Expresia
v & 255

va ntoarce ovaloare ce arecareprezentare pe bii toi biii dinbyteul dinstnga 0 i cel dindreapta identic cuoctetul dindreapta alui v.Spunem c 255 este masc pentru octetul din dreapta. dindreapta.
19 Limbaje deprogramare Conf.dr.L. STOLERIU LSTOLER@UAIC.RO

Literemari/literemici Litere mari / litere mici


#include <stdio.h> #include <conio.h> #include <ctype.h> void main(void) { int c; while ((c = getchar()) != EOF) { if (isupper(c)) // sau (c>='A' && c<='Z') putchar(c | (1 << 5)); else putchar(c); } }
20

Limbaje deprogramare Conf.dr.L. STOLERIU LSTOLER@UAIC.RO

S-ar putea să vă placă și