logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Kurs programowania C/C++. Część 1.3 - Operatory

jankol-el 18 Paź 2013 16:43 5763 0
REKLAMA
  • Kurs programowania C/C++. Część 1.3 - Operatory


    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++
    Zaloguj się, aby zobaczyć kod

    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:
    Kurs programowania C/C++. Część 1.3 - Operatory

    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++
    Zaloguj się, aby zobaczyć kod

    I efekt:
    Kurs programowania C/C++. Część 1.3 - Operatory

    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++
    Zaloguj się, aby zobaczyć kod

    Co da nam na ekranie taki wynik:
    Kurs programowania C/C++. Część 1.3 - Operatory

    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++
    Zaloguj się, aby zobaczyć kod

    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++
    Zaloguj się, aby zobaczyć kod

    Czego efektem jest:
    Kurs programowania C/C++. Część 1.3 - Operatory

    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++
    Zaloguj się, aby zobaczyć kod

    I działanie:
    Kurs programowania C/C++. Część 1.3 - Operatory

    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
    O autorze
    jankol-el
    Poziom 20  
    Offline 
    Specjalizuje się w: elektronika & komputery
    jankol-el napisał 559 postów o ocenie 28, pomógł 24 razy. Mieszka w mieście Okolice Zielonej Góry. Jest z nami od 2006 roku.
  • REKLAMA
REKLAMA