Start Publikacje Skrypt do zajęć z programowania mikrokontrolerów AVR w językuC - CZĘŚĆ VI

Skrypt do zajęć z programowania mikrokontrolerów AVR w językuC - CZĘŚĆ VI

Drukuj Email
Wpisany przez inż. Arkadiusz Krysiak   
czwartek, 30 października 2014


OPA

 

1.19. Operatory post

Operatory post (po czasie) stanowią suffix do zmiennych na których są wykonywane.

operand++;
Przy takim zapisie najpierw jest zwracana zawartość operandu a następnie inkrementowana o 1.
operand--;
Przy takim zapisie najpierw jest zwracana zawartość operandu a następnie dekrementowana o 1.
Przykłady:

int joe=3;
joe++;

Wartość zmiennej joe wynosi aktualnie 4.

Printf ("%i",joe++);

Na wejściu instrukcji printf uzyskujemy 4, ale wartość joe po wykonaniu bieżącej linii kodu wynosi 5.

1.20. Operatory pre i unarne

Operatory pre (przed czasem) stanowią prefiks do zmiennych na których są wykonywane.

++operand;

Operand jest wpierw zwiększany o 1 a wartość jego jest zwracana do następnej operacji.

--operand;

Operand jest wpierw zmniejszany o 1 a wartość jego jest zwracana do następnej operacji.

!operand;

Operator logicznego NOT

~operand;

Operator bitowego NOT
Przykład:

int bart=7;
printf("%i",--bart);

Na wejściu printf dostajemy 6. Wartość zmiennej bart również wynosi 6.

int lisa=1;
printf("%i",!lisa);

Na wejściu dostajemy 0 (false).

int lisa=1;
printf("%i",~lisa);

Na wejściu dostajemy 254.

1.21. Operacje dwuargumentowe

Poniżej przedstawiono grupę operatorów dwuargumentowych.
expression1 + expression
Wyrażenie zwraca sumę składników.

expression1 - expression2

Rezultatem tego wyrażenia jest różnica wyrażenia pierwszego i drugiego.

expression1 * expression2

Rezultatem wyrażenia jest iloczyn obydwu wyrażeń.

expression1 / expression2

Wynikiem jest iloraz pierwszego wyrażenia przez drugie.

expression1 % expression2

Rezultatem jest reszta z dzielenia całkowitoliczbowego wyrażenia pierwszego przez drugi

expression1 & expression2

Wynikiem jest iloczyn bitowy obu wyrażeń zgodny z tabelą poniżej.

expression1 | expression2

Rezultatem jest bitowa suma logiczna zgodna z tabelą poniżej.

expression1 ^ expression2

Zwraca bitową różnicę symetryczną zgodnie z tabelą poniżej.

e1 e2 & | ^
0 0 0 0 0
0 1 0 1 1
1 0 0 1
1
1 1 1 1 0

 

expression1 >> shift_value

Zwraca wartość wyrażenia 1 przesuniętego w prawo o wartość przesunięcia. Jeśli przesuwany o 1 pozycję w prawo to dzielimy liczbę bez reszty przez 2 (dotyczy tylko zmiennych typu unsigned). Jeśli przesuwamy wartość stałą lub zmienną kompilatora zostaje ona w skompilowanym programie zamieniona obliczoną wartością stałą. W przypadku przesuwania zmiennej programu zostają umieszczone rozkazy wykonujące to zadanie.

expression1 << shift_value

Zwraca wyrażenie 1 przesunięte w lewo o wartość przesunięcia. W najmłodszy bit wprowadzana jest wartość bitu=0. Jeśli zostaje przekroczony zakres zmiennej to najstarszy bit jest tracony. Przesunięcie w prawo powoduje pomnożenie liczby przez 2 (dotyczy tylko zmiennych typu unsigned).