Portal internetowy i Darmowy Kurs Programowania C++
  Forum C++
 
=> Nie jesteś jeszcze zarejestrowany?

Rzeczy związane z C# Dobrze zaczac od drugiej strony

Forum C - Operatory - wstęp

Znajdujesz się tutaj:
Forum C => Kursy => Operatory - wstęp

<-Powrót

 1 

Dalej->


admin
(18 postów dotychczas)
13.02.2008 20:00 (UTC)[zacytuj]
To jest jeden z najprzyjemniejszych rozdziałów w całym kursie. Tak więc zaczynajmy. Operatory wbrew swej nazwie są bardzo proste do zrozumienia, a co ważniejsze bardzo uprzyjemniają życie. Część z nich będzie Ci dobrze znana z lekcji matmy.







Operatory arytmetyczne
nazwa symbol
dodawanie +
odejmowanie -
mnożenie *
dzielenie /
podstawienie =
pre-inkrementacja ++x
pre-dekrementacja --x
post-inkrementacja x++
post-dekrementacja x--
dzielenie modulo %

Właściwie pierwsze pięć operatorów doskonale znasz ze szkoły. No ale od czegoś musiałem zacząć

operator + to operator służący do dowania do siebie dwóch wartości stojących po obu stronach tego operatora.

3 + 5;
zmienna + 6;
zmienna + zmienna;
operator - działa analogicznie jak jego poprzednik, tyle że w drugą stronę Od wartości leżącej po lewej stronie operatora zostaje odjęta wartości stojąca po jego prawej stronie.

9 - 1;
zmienna - 15;
zmienna - zmienna;
operator * jest również operatorem dwu-argumentowym i mnoży dwie wartości znajdujące się po jego obu stronach.

1 * 3;
zmienna * 4;
zmienna * zmienna;
operator / jest odwrotnością poprzednika i powoduje podzielenie wartości stojącej po jego lewej stronie przez wartość będącą po stronie prawej.

2 / 5;
zmienna / 51;
zmienna / zmienna;
operator = działa nieco inaczej niż operatory wspomniane wcześniej. Służy on do przypisania wartości leżącej po jego prawej stronie do wartości [tutaj zmiennej] stojącej po stronie lewej.

zmienna = 5;
zmienna = zmienna;
//34 = zmienna;
Dotychczas można było stosować po obu stronach operatów zarówno zmienne jak i wartości. W przypadku operatora przypisania tej swobody nie ma. Zmienne mogą wystąpić po obu stronach, lecz wartości tylko po prawej. Ma to sens. Bo przecież co miałby oznaczać zapis: 34 = zmienna. Sam widzisz, że jest to dość dziwaczne. Kompilator też to zauważa i zgłasza błąd.
Mimo wszystko mam nadzieję, że powyższy tekst był jedynie przypomnieniem. Jednak postanowiłem go zamieścić, bo czasem najprostsze przychodzi najtrudniej Pora teraz na nieco bardziej ciekawsze operatory.

operator ++ to operator inkrementacji, czyli zwiększania o jeden. Operator ten występuje w dwóch wersjach:

zmienna++; //post-inkrementacja
++zmienna; //pre-inkrementacja
Oba powyższe zapisy powodują zwiększenie o jeden wartości zmiennej. Jest jednak pewna subtelna różnica, o której na razie nie chciałbym mówić. Przyjmijmy, że oba zapisy są równoznaczne z: zmienna = zmienna + 1. Skoro jest zwiększanie o jeden to powinno też być zmniejszanie o tę wartość. Oczywiście jest. Nazywa się dekrementacja.

operator -- jest operatorem dekrementacji, czyli zmniejszania o jeden. Tutaj też wyróżniamy dwie wersje:

zmienna--; //post-dekrementacja
--zmienna; //pre-dekrementacja
Analogicznie jak wyżej. Tyle, że tutaj zmniejszamy o jeden wartość zmiennej. A zatem powyższe zapisy są uproszczeniem: zmienna = zmienna - 1.

Jak zapewne zdążyłeś się zorientować powyższe cztery operatory zostały wprowadzone do języka, aby ułatwić programowanie. Jeśli są dla Ciebie nie jasne to możesz ich wcale nie używać. Dobrym przykładem na to jest fakt, iż w innych językach nie ma operatorów inkrementacji i dekrementacji. Jednak zachęcam do ich stosowania, bo jest to wygodne i praktyczne.
Teraz będzie operator, którego działania pewnie nie znasz jeśli wcześniej nie miałeś styczności z programowaniem. Mowa o dzieleniu modulo. A co to takiego? Sprawa jest prostsza, niż się wydaje.

operator % zwraca resztę z dzielenia :-/ A miało być prosto Chyba najlepiej jest to wyjaśnić na przykładzie, więc looknij sobie:

10 % 3; // = 1
20 % 5; // = 0
30 % 6; // = 0
32 % 5; // = 2
Zacznijmy od pierwszego wyrażenia. Działa to tak. Jeśli podzielimy 10 przez 3 to otrzymamy 3.(33). Oznacza to, że liczba 3 mieści się w całości w liczbie 10 trzy razy [co za zbieg okoliczności ] Powiedziałam w całości bo zostaje jeszcze reszta, która przy normalnym dzieleniu wynosi 0.33. Nas jednak nie interesuje zwykłe dzielenie. Zauważ, że gdy dodasz do siebie powstałe trzy liczby 3 to wyjdzie liczba 9. Zatem do okrągłej 10 brakuje 1. No i mamy rozwiązanie. Teraz jest bardzo prosto. 20 podzielone na 5 to równe 4. Więc reszty nie ma Zatem wynikiem jest 0. Analogicznie wygląda sytuacja w trzecim przypadku. Nieco ciekawiej jest na końcu. Jak podzielisz 32 przez 5 to otrzymasz dokładnie 6.4. Już wiemy, że w liczbie 32 liczba 5 mieści się w całości 6 razy. Teraz wystarczy pomnożyć ilość wystąpień liczby 5 w liczbie 32 przez wspomnianą 5. Wiem, że namieszałem, ale przeczytaj to raz jeszcze na spokojnie. Zatem mamy prosty rachunek 5 * 6 [skłamałem, do tych prostszych on jednak nie należy ] W wyniku otrzymamy 30. Następnie trzeba wykonać proste odejmowanie liczby 30 od liczby 32. Tym oto sposobem otrzymaliśmy liczbę 2, która jest resztą z dzielenia modulo.
Nie martw się jeśli nie bardzo to rozumiesz. Dzielenie modulo jest stosowane raczej sporadycznie. Na pewno na początku nie będziesz go potrzebował. Bo i po co. No właśnie: Do czego może służyć taki operator?. Są pewne bardzo specyficzne zastosowania. Jednak potrzymam Cię trochę w niepewności. Po prostu wszystko w swoim czasie Tym oto sposobem omówiliśmy wszystkie [chyba] operatory arytmetyczne. Pora na omówienie innych operatorów, które są znacznie częściej stosowane niż omówione wcześniej. Mowa tutaj o operatorach relacji.




Operatory relacji
nazwa symbol
większe od.. >
mniejsze od.. <
większe lub równe z.. >=
mniejsze lub równe z.. oznacza: większy od.. Chodzi o taką sytuację:

4 > 2; //prawda
3 > 8; //fałsz
1 > 1; //fałsz
zmienna > 6;
zmienna > zmienna;
5 > zmienna;
Całe wyrażenie ma wartość prawda, gdy warunek jest prawdziwy. W naszym przypadku jest 4 > 2, co jest prawdą. Zatem warunek został spełniony i wyrażenie jest prawdziwe. W drugim przypadku jest 3 > 8, co prawdą nie jest. W związku z tym warunek nie został spełniony i wyrażenie jest fałszem! W trzecim przypadku jest mały podstęp. Czy 1 > 1. Oczywiście nie, więc mamy fałsz.

operator < czyli: mniejszy od.. Konkretnie:

21 < 15; //fałsz
11 < 23; //prawda
84 < 84; //fałsz
zmienna < 8;
zmienna < zmienna;
9 < zmienna;
Tutaj jest zupełnie odwrotna sytuacja, choć zasada ta sama. Wyrażenie jest prawdziwe tylko wtedy, gdy wartość stojąca po lewej stronie jest mniejsza od wartości będącej po stronie prawej. Tak dla formalności. Czy liczba 21 < 15? Chyba nie Zatem całe wyrażenie jest oczywiście fałszem. Natomiast 11 < 23 jest jak najbardziej prawdziwe, więc całe wyrażenie jest prawdą. Jak będzie w przypadku 84 < 84. Tutaj będzie to fałsz, ponieważ są to te same liczby. Chyba proste, co?

operator >= to połączenie operatora > z operatorem ==. Taka mała dygresja. Mówiąc poważnie znaczy on tyle co: większy lub równy z.. Kilka przykładów dla utrwalenia:

2 >= 3; //fałsz
14 >= 13; //prawda
13 >= 13; //prawda
zmienna >= 17;
zmienna >= zmienna;
13 >= zmienna;
I trochę objaśnień. Na początku widzimy zapis: 2 >= 3. Wynika z niego, że 2 jest większe lub równe z 3. Z tym nie możemy się zgodzić, gdyż jest to nie prawdą. Następnie jest 14 >= 13. Tutaj nie ma problemu. Wszystko się zgadza. Nieco ciekawiej jest w trzecim przypadku. Mamy zapis: 13 >= 13. Liczba 13 jest równa 13 [co za odkrycie ]. Zatem wyrażenie jest oczywiście prawdziwe.

operator 2) || (34 2) || (34 2) || (34 = 61)), które całościowo jest fałszem. Gdy zastosujemy tutaj operator ! relacja się zmieni. Tak więc z fałszu zrobi się prawda. Prawda, że fajne. Jeszcze tylko mała uwaga. Podczas pisania bardziej skomplikowanych wyrażeń stosuj nawiasy [oczywiście okrągłe]. Co prawda nie zawsze są one konieczne, lecz z reguły ułatwiają późniejszą analizę kodu. Weźmy taki przykład: a * b + c / d - e / f * g + h. Pewnie pomyślałeś: :-/ Nie jest tak źle, bo wszyscy znamy kolejność wykonywania działań i nie ma problemu. Jednak na pierwszy rzut oka.. Wiadomo chęć programowania jakoś odchodzi Teraz zaopatrzmy nasze skomplikowane wyrażenie w nawiasy. Mamy taki zapis: (a * b) + (c / d) - (e / f * g) + h Tutaj wyraźnie widać, co zostanie wykonane najpierw. Dzięki kilku znaczkom ułatwiliśmy sobie [i innym] programowanie. Póki co przejdźmy do operatorów bitowych.






Operatory bitowe
nazwa skrót symbol
suma bitowa OR |
iloczyn bitowy AND &
różnica bitowa XOR ˆ
negacja bitowa NOT ~
przesunięcie bitowe w lewo - >

Na początku chciałem zaznaczyć, że operatory bitowe są bardzo specyficzne jeśli chodzi o działanie. Stosuje się je do bardziej skomplikowanych czynności. Tak więc na początku na pewno nie będziesz ich potrzebował. Po za tym operują one wartościach w postaci bitowej. Tak więc jeśli nie znasz systemu dwójkowego to.. Nie, nie przerywaj czytania. Skocz sobie do działu systemy liczbowe i wróć, gdy skończysz. Jak już wiesz, komputerom najlepiej pracuje się na liczbach w systemie 16-wym lub 2-wym. Aby zrozumieć operatory bitowe trzeba znać nieco system 2-wy. Skoro tutaj doszedłeś to zakładam, iż posiadasz pewną wiedzę na ten temat. Jeśli nie, to raz jeszcze odsyłam na inną stronę. Link znajduje się nieco wyżej.
Ponieważ część tych operatorów jest zbliżonych do siebie działaniem, zatem omówię je na jednym przykładzie. Użyjemy dwóch liczb: 34 i 23.

dec bin
34 00100010
23 00010111

operator | czyli suma bitowa lub bitowe OR. Działanie jest zasadniczo proste. Tutaj najlepiej jest wyjść od przykładu:

dec bin
34 00100010
23 00010111
34 | 23 00110111

Bitowe OR sprowadza się do prostej czynności sprawdzenia układu zer i jedynek w liczbach poddawanych operacji. Każde wystąpienie jedynki zarówno w pierwszej, jak i w drugiej liczbie oznacza jedynkę. Widzisz tutaj zbliżone działanie do operatora sumy logicznej. Oczywiście! Tutaj też jest ta sama taktyka. Przynajmniej jedno z dwóch musi być prawdą [jedynka].

operator & czyli iloczyn bitowy lub bitowe AND. Działa on analogicznie, jak iloczyn logiczny. Mały przykład powinien wystarczyć:

dec bin
34 00100010
23 00010111
34 & 23 00000010

Tuaj jest identycznie, jak w przypadku iloczynu logicznego. Aby umieścić jedynkę w wartości wynikowej w obu wartościach poddawanych operacji muszą być też jedynki. Wszystko najlepiej widać na przykładzie powyżej

operator ^ czyli symetryczna różnica bitowa lub po prostu bitowe XOR. Ten operator nie ma swojego odpowiednika wśród operatorów logicznych, więc nie będzie żadnej analogii Zasada działania jest nadal taka sama, czyli dokonanie pewnych modyfikacji na bitach. Zaczynamy jak zwykle od przykładu:

dec bin
34 00100010
23 00010111
34 ^ 23 00110101

W zasadzie nie trzeba tutaj nic objaśniać, ale.. powiem krótko. Wszędzie tam, gdzie występują takie same znaki piszemy zero. W miejscach, gdzie są różne jedynkę. To tyle. Popatrz sobie na przykład i przeanalizuj go.

operator ~ czyli negacja bitowa lub bitowe NOT. Jeśli zrozumiałeś działanie logicznego operatora negacji to właściwie te słowa są zbędne. No ale jak już zacząłem..

dec bin
34 00100010
~34 11011101

Cóż mogę powiedzieć. Chyba tylko tyle, że jego działanie polega na zamianie bitów. Warto też zapamiętać, iż ten operator jest jednoargumentowy, w wyniku czego powyżej nie ma już liczby 23.

operator > i > 2 0 0 0 0 0 0 0 1

Jeśli patrzyłeś dokładnie to zapewne zorientowałeś się, że operacja 6 >> 2 da w wyniku 1. Dlaczego tak się stało? Przecież 6 >> 2 oznacza 6 / 22, czyli: 6 / 4. Wynikiem tego równania jest 1.5. Coś tu chyba jest nie tak. Przecież pracowaliśmy na liczbach całkowicych! Prześledźmy dokładniej co tutaj zaszło. Operacja: 6 >> 2 w systemie dziesiętnym wygląda tak: 6 / 22. Więc mamy: 6 / 4. Teraz uważaj. Po wykonaniu tej operacji otrzymamy dokładnie 1.5. Zatem jest to liczba nie całkowita. Dlatego też przy przesuwaniu jedna jedynka zostanie zgubiona i wynik zostanie zaokrąglony do liczby całkowitej.
Został jeszcze jeden przypadek, czyli: 6 >> 3. Przeliczając to na system decymalny otrzymamy: 6 / 23, czyli 6 / 8. Otrzymamy tutaj 0.75, co też zostanie zaokrąglone, ale.. w dół! Wiem, że bardziej logiczne wydaje się tutaj zaokrąglenie w górę, lecz komputery działają nieco inaczej niż ludzie Najłatwiej jest to wychwycić na przykładzie tabelki zamieszczonej poniżej. Wyraźnie widać, że występują tam tylko same zera!

operacja 128 64 32 16 8 4 2 1
0 0 0 0 0 1 1 0
6 >> 3 0 0 0 0 0 0 0 0

Nastąpiło przesunięcie bitów o trzy miejsca. Dziwnym trafem wszystkie bity wyszły po za zakres bajtu i zostały zgubione.


--------------------------------------------------------------------------------

To właściwie wszystko. Na początek powinno wystarczyć. Co do operatorów, którymi posługujemy się na co dzień to chyba nie ma żadnych niejasności. Nowością mogą być operatory ++ oraz --, które są jedynie rozwinięciem już istniejących + i -. Operator % może się z początku wydawać trudny, ale potrzeba jego użycia wyjdzie dopiero po pewnym czasie, kiedy zaznajomisz się bardziej z C++. Jeśli chodzi o operatory logiczne to również powinieneś zaskoczyć Pozostałe, czyli operatory bitowe są nieco trudniejsze do zrozumienia, ale wszystko można opanować. Jeśli nie rozumiesz ich działania to nie przejmuj się. Nie są niezbędne. Jednak, gdy bardzo chcesz zrozumieć zasadę ich działania to raz jeszcze przeczytaj sobie o nich i dokładnie przeanalizuj wszelkie przykłady. Możesz też poćwiczyć na innych liczbach, posługując się choćby kalkulatorem Window'sowskim. Jeśli wybierzesz widok profesjonalny ujrzysz kilka nowych przycisków. Chodzi mi o przyciski: And, Or, Xor, Not, Lsh i Mod. Działanie czterech pierwszych powinienneś już znać. Tak tak operacje logiczne na bitach. Przycisk Mod służy do dzielenia modulo. Natomiast Lsh do przesunięć bitowych w lewo. Jeśli chcesz zastosować przesunięcie w prawo musisz najpierw zaznaczyć pole Inv znajdujące się po lewej stronie. Pamiętaj też, że możesz szybko i łatwo przeliczać liczby na inne systemy liczbowe. Służą do tego celu przyciski Hex, Dec, Bin, Oct,. Chyba wiadomo co oznaczają? Trzy pierwsze na pewno kojarzysz. Są to kolejno: system 16-wy, 10-ny i 2-wy. Ostatni konwertuje liczbę do systemu ósemkowego. System ósemkowy działa podobnie, jak szesnastkowy. Jedyną różnicą jest liczba 8 w podstawie, zamiast 16. Prawdę mówiąc jeszcze nigdy nie spotkałem się nigdzie z wykorzystaniem tego systemu. To już naprawdę koniec tego rozdziału.









Odpowiedz:

Twój nick:

 Kolor tekstu:

 Wielkość tekstu:
Zamknij tagi



Tematy łącznie: 19
Posty łącznie: 56
Użytkownicy łącznie: 48
Obecnie online jest (zarejestrowanych użytkowników): Nikt crying smiley
 
 
   
 
Ta strona internetowa została utworzona bezpłatnie pod adresem Stronygratis.pl. Czy chcesz też mieć własną stronę internetową?
Darmowa rejestracja