Kurs:
Część 1.0 - Start w języku C
Część 1.1 - Typy danych i zmienne
Część 1.2 - Tablice i wskaźniki
Część 1.3 - Operatory
Część 1.4 - Instrukcje i pętle
Operatory
Powiedzmy sobie na początek czym są i jakie mamy operatory w języku C.
Operatorem nazywamy konstrukcję językową jednoargumentową, bądź wieloargumentową zwracającą jakąś wartość. Operatory określają jakie operacje mają być wykonane i w jakiej kolejności.
Oto operatory w języku C:
• operatory arytmetyczne (= , +, - , * , / , %, ( , ) , [ , ] )
• operatory logiczne (&& , ||, ! )
• operatory relacji (>, >=, < , <= )
• operatory przyrównania ( == , != )
• operatory bitowe (& , | , ^ , << , >> , ~ )
• operatory przypisania (=,+= , -= , *= , /= , %= , ^= , |= , <<= , >>= )
• operatory (post i pre) inkrementacji (zwiększania) i dekrementacji (zmniejszania) ( ++ , -- ).
Operatory arytmetyczne służą nam do prostych działań matematycznych.
Napisałem prosty program:
Kod: C / C++
Ważna uwaga, że "znak równości" (=), nie jest operatorem równości w C/C++! Często się to może mylić, więc trzeba o tym pamiętać! Nowością tutaj jest na pewno %.1f, jak można się domyślić powoduje to wyświetlanie iluś miejsc po przecinku, akurat w przypadku %.1f, mamy jedno miejsce po przecinku, gdy wpiszemy %.3f, będziemy mieli analogicznie trzy miejsca po przecinku. Pozwala to zadbać o estetykę.
Po wykonaniu mamy taki efekt:

Warto wspomnieć tutaj o tzw. l-wartościach(ang. l-value) i p-wartościach (ang. r-value).
L-wartość (l-wyrażenie) – wyrażenie reprezentujące zmienną, mogące znaleźć się z lewej strony operatora przypisania (a=1.1; z=x+y). Modyfikowalna l-wartość – określa obszar zmienną, której zawartość może być zmieniana. W przypadku działania takiego jak c=a+b po lewej mamy wynik, czyli l-wartość, a po prawej p-wartość, czyli działanie arytmetyczne. Celowo nie użyłem operatorów % i nawiasów. Znak procentu jest to tzw. dzielenie modulo, czyli dzielenie z resztą. Na zmiennych z mojego programu nie mogłem pokazać przykładu z %, bo można tego używać tylko na liczbach całkowitych, czyli w grę wchodzi tylko typ int.
Przykład może bardziej rozjaśnić sprawę:
Kod: C / C++
I efekt:

Przykład powinien wszystko wyjaśnić, ale pozwolę sobie na dodanie kilku słów. Jeśli normalnie podzielimy 14/10 to w liczbach całkowitych uzyskamy 1, bo 10 mieści się tylko raz w 14. Dzielenie modulo pozwala uzyskać ile reszty nam zostało z dzielenia, a w tym przypadku 10 w 14 mieści się raz, a pozostanie nam 4 reszty. To tyle z dzielenia modulo. Wracając do nawiasów, służą nam do tego samego co w zwykłej matematyce, pozwalają określać kolejność działań. Na dole tej części kursu możemy odnaleźć priorytety operatorów, bo zobaczyć w jakiej kolejności będą wykonywane działania w naszym programie. To nie wszystkie możliwości matematyczne, oczywiście możemy pierwiastkować, obliczać sinusy i cosinusy, ale do tego służy plik nagłówkowy "math.c" o czym postaram się wspomnieć.
Operatory logiczne służą nam do tworzenia wyrażeń logicznych. W czystym języku C mamy do dyspozycji && (AND - iloczyn logiczny) , || (OR - suma logiczna), ! (NOT - negacja). Możemy użyć tego po zapoznaniu się z przyszłymi zagadnieniami. Dlatego wtedy poznamy szczegóły działania takich operatorów.
Operatory relacji (>, >=, < , <= ) to nic nowego, tak samo jak w matematyce. Zastosowanie poznamy w stosownym momencie. Dzięki tym operatorom możemy określić w jakiej relacji są zmienne, podobnie jest z operatora przyrównania ( == , != ), których nie można mylić z operatorami przyrównania. Natomiast operatory bitowe (& , | , ^ , << , >> , ~ ) pozwalają wykonać operacje na poszczególnych bitach zmiennych.
• & - Iloczyn logiczny bitów (AND)
• | - Suma logiczna bitów (OR)
• ^ - Różnica symetryczna / suma modulo 2 (XOR)
• << - Przesunięcie bitowe w lewo
• >> - Przesunięcie bitowe w prawo
• ~ - Negacja bitowa
Niestety, by się tym posługiwać musimy mieć pojęcie o systemie dwójkowy. Jeśli zgłoszą się interesanci to rozwinę temat. Jakimże będzie programistą ktoś, kto nie ma pojęcia o systemach liczbowych. Na początek nie będzie nam to i tak potrzebne.
Operatory przypisania są bardzo ważnymi i przydatnymi operatorami.
Taki operator jak = i == to wielka różnica, trzeba o tym pamiętać i tego nie mylić.
Pierwszy (=) przypisuje wartość tego co jest po prawej stronie do tego co mamy po lewej stronie, natomiast drugi (==) sprawdza, czy po obu stronach mamy to samo.
Pozostałe operatory przypisania to taka hybryda wcześniej omawianych członów z operatorem podstawowego przypisania (=).
Tak więc takie wyrażenie jak: a += b; to złożenie takiej konstrukcji: a = a + b;, czyli dodanie do wartości "a", wartości "b". Skraca to zapis. Przykład:
Kod: C / C++
Co da nam na ekranie taki wynik:

Nietrudno zauważyć, że pierwsza metoda, czyli c=a+b jest nam znana już, prosta i c jest wynikiem sumy a i b. Druga, nowa metoda, czyli a+=b jest krótsza, angażuje tylko dwie zmienna, bo tutaj nie potrzebna nam zmienna c, ale jej użycie nie jest błędem i także możemy jej użyć (c=a+=b), ale to bez sensu.
Trzeba zapamiętać, że całe wyrażenie jest już wynikiem, co pokazałem w programie:
Kod: C / C++
Analogicznie jest z pozostałymi operatorami.
Teraz przyjrzymy się operatorom inkrementacji, dekrementacji.
Na prosty język jest to po prostu zwiększenie wartości, lub zmniejszenie jej o jeden. Jest to odpowiednik operacji: ZMIENNA+=1; i ZMIENNA-=1.
Dopiski pre i post to kolejność działania, co można tłumaczyć pre - przed, a post - po.
Przykłady:
Kod: C / C++
Czego efektem jest:
Nie widać różnicy, prawda? Nasza zmienna1 miała być preinkrementowana, a zmienna2 predekrementowana. Działa, jedna się zwiększyła o jeden, druga zmniejszyła o jeden. Następnie zmienna1 miała być postinkrementowana, a zmienna2 postdekrementowana. Działa tak samo. Jeśli wstawimy te wyrażenie np. do funkcji wypisującej, bezpośrednio wszystko stanie się jasne:
Kod: C / C++
I działanie:

Podsumowując, chodzi o to, że gdy mamy zapis ++ZMIENNA to najpierw zostanie ta zmienna zwiększona, a potem użyta, gdy mamy zapis ZMIENNA++ spowoduje użycie zmiennej, a potem zwiększenie jej o jeden.
Trzeba pamiętać, że wszystko ma swoją kolejność, warto poeksperymentować z różnymi operatorami. Hierarchia w operatorach jest bardzo ważna.
Priorytety operatorów:
• () , []
• ! , ~ , ++ , --
• / , %
• -
• << , >>
• < , <= , > , >=
• == , !=
• &
• ^
• |
• &&
• ||
• = , += , -= , *= , /= , %= , ^= , |= , <<= , >>=
Na tym póki co zakończę tą część.
Radzę czasem zaglądać w przeczytane już materiały, bo kurs rozwija się na bieżąco. Dodaję niekiedy jakieś szczegóły, poprawiam drobne błędy.
Literatura:
-Język ANSI C. Programowanie. Wydanie II
Autorzy: Brian W. Kernighan, Dennis M. Ritchie
-Symfonia C++ Standard. Tom 1-2. Wydanie III
Autor: Jerzy Grębosz
-Czysty kod. Podręcznik dobrego programisty
Autor: Robert C. Martin
Fajne? Ranking DIY