Programació en C del PIC 16F690 amb PICkit 2

Referència Trucs Perifèrics   Recursos CITCEA
Tutorial Exemples Projectes   Inici

Operacions matemàtiques

A continuació tenim un resum breu de les operacions disponibles. Per a informació completa, podeu consultar qualsevol manual de llenguatge C; per exemple aquest.

Operadors aritmètics

Operador Utilització Exemple Comentaris
+ Suma c = a + b
- Resta c = a - b
* Multiplicació c = a * b
/ Divisió c = a / b
% Residu c = a % b Només per a variables enteres
Equival a c = a - b * enter(a / b)

Operadors d'assignació

Operador Utilització Exemple Comentaris
= Assignació b = 2 Posa a la variable de l'esquerra el resultat de l'expressió de la dreta
a = a + 3
k = m = n = 4 * a Equival a n = 4 * a;     m = n;     k = m
+= Autosuma a += 2 Equival a a = a + 2
b += x - 3 Equival a b = b + (x - 3)
-= Autoresta a -= 2 Equival a a = a - 2
*= Automultiplicació a *= 2 Equival a a = a * 2
/= Autodivisió a /= 2 Equival a a = a / 2

Operadors incrementals

Operador Utilització Exemple Comentaris
++ Incrementa en 1 a++ Equival a a = a + 1
b = a++ Equival a b = a;     a = a + 1
b = ++a Equival a a = a + 1;     b = a
-- Incrementa en 1 a-- Equival a a = a - 1
b = a-- Equival a b = a;     a = a - 1
b = --a Equival a a = a - 1;     b = a

Operadors a nivell de bits

Permeten fer operacions lògiques a nivell de bit (cada bit per separat) amb variables enteres.

Operador Utilització Exemple Comentaris
& Funció I bit a bit m = m & 0b00001111 Aquest exemple posa a zero els quatre bits més significatius de m
| Funció O bit a bit m = m | 0b00001111 Aquest exemple posa a u els quatre bits menys significatius de m
~ Inversió de bits n = ~m Canvia els 0 per 1 i els 1 per 0
<< Rotació de bits a l'esquerra n = m << 1 Els bits que surten per l'esquerra es perden
Per la dreta entren zeros
>> Rotació de bits a la dreta n = m >> 1 Els bits que surten per la dreta es perden
Per l'esquerra entren zeros

La instrucció << desplaça els bits a l'esquerra el número de posicions indicat. Per exemple:

	Valor = Valor << 2;

Desplaça els bits dos llocs a l'esquerra. El problema és que els dos bits de més a l'esquerra es perden (queden a zero). Si la variable que fem servir és de 8 bits i la fem rodar sis posicions cap a l'altre costat hauria de donar també el mateix resultat però ara serien sis bits els que es perdrien. Però entre les dues rotacions acabem tenint tots els bits al seu lloc, només cal fer una funció o (or) entre elles.

Rotació de bits

Comparacions

El seu resultat és booleà, pot ser 1 (cert) o 0 (fals).

Operador Utilització Exemple Comentaris
== Igualtat a == b El resultat és 1 si a i b són iguals
!= Desigualtat a != b El resultat és 1 si a i b són diferents
< Més petit que a < b El resultat és 1 si a és més petit que b
<= Més petit o igual que a <= b El resultat és 1 si a no és més gran que b
> Més gran que a > b El resultat és 1 si a és més gran que b
>= Més gran o igual que a >= b El resultat és 1 si a no és més petit que b

Operadors lògics per a variables binàries

Permeten fer operacions lògiques amb variables o expressions booleanes. Es pot aplicar també a altres variables, llavors es considera fals el valor 0 i cert qualsevol altre valor.

Operador Utilització Exemple Comentaris
&& Funció I a && b Dóna 1 si a i b són certes, en cas contrari dóna 0
|| Funció O a || b Dóna 0 si a i b són falses, en cas contrari dóna 1
! Funció NO !a Dóna 0 si a és certa i 1 si és falsa
~ ~a

Operadors d'adreçament

Operador Utilització Exemple Comentaris
& Adreça de la variable b = &a b passa a contenir l'adreça de la variable a
* Adreçament indirecte c = *b c passa a contenir el valor de la variable que està emmagatzemada a l'adreça que està a b
Si b = &d, c passa a ser igual a d

Altres operadors

Operador Utilització Exemple Comentaris
- Canvi de signe a = - 3
b = - c
+ No canvi de signe a = + 3 En realitat, no fa res
b = + c
sizeof( ) Mida en bytes m = sizeof( b ) Si b és char, m valdrà 1
, Separador Avalua totes les expressions però el resultat correspon a la darrera
a = b++, c + 2 Equival a b = b + 1;     a = c + 2
? : Operador condicional Vegeu l'apartat sentències

Canvi de tipus

Per poder operar dues variables, cal que les dues siguin del mateix tipus. Si no és així, el valor de la de tipus menor serà escalat al rang de la de tipus més gran. Per exemple si m és int i n és long, quan s'avalui l'expressió:

	c = m + n;

el valor de m serà convertit a long en el moment de sumar.

Fixem-nos ara en el següent tros de programa en el que m i n són int i c és float:

	m = 4;
	n = 3;
	c = m / n;

El valor de c serà 1.0 ja que com m i n són int la divisió es fa en int i el resultat és 1 (els decimals es perden). Després el resultat es converteix a float per guardar-loa a c però els decimals ja no es poden recuperar. podem forçar a que el programa canviï el tipus; per exemple en aquest cas:

	m = 4;
	n = 3;
	c = (float) m / (float) n;

Els valors de m i n són convertits a float en el moment de fer l'operació i, per tant, el valor de c sí serà l'esperat. El mateix obtindríem, per exemple, amb el següent:

	m = 4;
	n = 3;
	c = (float) m / n;

ja que com un dels dos elements del quocient és float, l'altra es converteix al mateix nivell en fer l'operació.

Ordre d'avaluació

Quan en una expressió hi ha diversos operadors, cal tenir clar en quin ordre seran avaluats. En C hi ha onze nivells que els podem trobar a la taula següent. Com el parèntesi sempre és el primer a avaluar-se, en cas de dubte podem fer-lo servir per desfer l'ambigüitat.

Quan hi dos operadors del mateix nivell, en alguns casos s'avalua el que està situat més a l'esquerra de l'expressió i en altres el que està més a la dreta, segons s'indica a la darrera columna de la taula.

Prioritat Operadors Ordre en el mateix nivell
1 ( )       [ ]       ->       .       Primer els de l'esquerra
2 ++       --       - (canvi signe)       !       ~       + (no canvi de signe)       sizeof( )       * (adreçament indirecte)       &       Primer els de la dreta
3 * (multiplicació)       /       %       Primer els de l'esquerra
4 + (suma)       - (resta)       Primer els de l'esquerra
5 <       <=       >       >=       Primer els de l'esquerra
6 ==       !=       Primer els de l'esquerra
7 &&       Primer els de l'esquerra
8 ||       Primer els de l'esquerra
9 ?:       Primer els de la dreta
10 =       +=       -=       *=       /=       Primer els de la dreta
11 , Primer els de l'esquerra

Alguns exemples:

	4 * a + g		equival a		(4 * a) + g
	
	b - c + d		equival a		(b - c) + d

 

 

Licencia de Creative Commons
Esta obra de Oriol Boix está licenciada bajo una licencia no importada Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0.