EXERCITII REZOLVATE
Sa se scrie o functie invert (x , p , n) care inverseaza bitii 0 cu 1 si 1 cu 0 incepand cupozitia p pentru n biti.
P 0
n biti
main()
int invert(x,p,n);
int x,p,n;
masca = masca <<p-1;
for (i=1 ; i< n ; i++)
return (m);
Sa se scrie o functie numbit (x) care numara numarul de biti de 1.
main()
int numbit (x)
int x;
else masca =masca << 1;
return (n);
3.Sa se scrie o functie rotdr(n , b) care efectueaza rotatia dreapta cu b pozitii:
main()
int rotdr(n,b)
int n,b;
Sa se scrie o functie care calculeaza complementul fata de 2.
int compl_2(int x)
return (x);
Evaluarea expresiilor:
/* Program pentru ilustrarea proprietatilor de */
/* asociativitate si prioritate a operatorilor */
#include <stdio.h>
main()
Regula de evaluare pentru operatorul += este de la dreapra la stanga, rezulta ca evaluarea se va face astfel:
c+=d c=c+d apoi b=b+c apoi a=a+b
Rezultatul care se afiseaza va fi :
d=8
e=15
b=21
a=26
Pentru expresia 2 evaluarea decurge conform prioritatilor operatorilor. Operatorii pe care ii gasim sunt in ordinea proritatilor ++ , -- , - , +;
Expresia d=a++ + b + c + -d se va evalua astfel:
d= a+b+c+ (-d);
Dupa folosirea valorii lui a se va incrementa a cu o unitate si dupa folosirea valorii lui c se va decrementa c cu o unitate.
Deci dupa executie a=6 , b=6 ,c=6 ,d=8.
Expresia va avea valoarea 5+6+7-8=10.
Pentru expresia 3 avem :
d= a% b% c= (a%b) %c
Rezultatul va fi (7%6)%5=1%5=1.
Evaluarea expresiilor 2 :
/*Program 2 pentru evaluarea expresiilor*/
#include <stdio.h>
main()
Expresia 1 este echivalenta cu
t = ( x < ( z+t ) < y)
Evaluarea se face de la stanga la dreapta
z+t=7
x=1
1< 7 deci x< (z+t) va avea valoarea 1
1 < y rezulta ca t va avea valoarea 1.
Expresia 2 este echivalenta cu :
t = (x == (z<(t+y)))
t+y=6
z < t+y va avea valoarea 1 deoarece expresia e adevarata.
X == 1 este o expresie adevarata deci t = 1.
Expresia 3 este echivalenta cu:
t= (x *= (z< (y+y)))
y+t = 6
z< y+t este o expresie cu valoarea adevarata deci va avea valoarea 1.
t=(x=x+1) rezulta t=1
/* folosirea operatorului (tip)*/
#include <stdio.h>
main()
(int) 3.7 /2 =1
(int) (float) 3.7 /2=1
(float) 3 /2 = 1.500000
Asociativitatea este dreapta pentru operatorul tip.
|