Anti-Santa banner
Pozor! Veškerý obsah se přesouvá na www.klusik.cz

Programování v jazyce C

Začátky s programováním

Operátory


Operátor je ono "lepidlo" mezi výrazy, mezi proměnnými a mezi konstantami. V jazyce C Existují následující nejběžnější operátory. Tabulka je setřízená dle priority - nejdříve ty s vyšší a pak ty s nižší :-)

Značení v C Význam
* Pointer (dereferenční operátor)
& Adresa (referenční operátor)
! Negace (např. !1 je 0 (binární negace))
&& Logický součin (AND)
|| Logický součet (OR)
* Součin
/ Podíl
+ Součet
- Rozdíl

Samozřejmě existují i další operátory, ale ty zatím potřebovat nebudeme, až budou potřeba, zase je uvedu!

Jen tak pro zkoušku si zkuste říci, v jakém pořadí budou probíhat následující operace a co se vlastně do proměnné "y" uloží:

x=5;
z=2;
y = (( x - 2 * ( z + 2 * x ))&&( x- 2 * z - 1));

Při řešení upozorňuji, že "pravda" se značí 1, nepravda 0! Hodně zábavy :-)

Řešení:

Vyhodnocuje se zleva. Nejdříve se spočte součin v nejvíce vnořené závorce, takže 2*x, což je 10. K tomu se přičte "z" - což bude 12. To se celé dvakrát vynásobí a vznikne 24. A to celé se odečtě od "x" - takže 5-24, coz je "-19". Dále se vyhodnotí další součin v další nejvnořenější závorce - takže opět 2*z - takže 4. Pak se vyhodnotí první dva členy součtu či součinu, takže 5 - 4 a to je jedna a pak poslední člen -1 takže dohromady 0. A nakonec se provede log. součin mezi hodnotami -19 a 0, který je nulový (0 maska nepropustí žádnou jedničku, zkuste si to binárně - viz. níže). Takže do y se uloží "0" :-) Binární vysvětlení oné "masky jak jsem říkal":

např. (8 && 4). Rozložíme na binární kódy a napíšeme pod sebe:

1000 0100

a ted jen opisujeme - dolní číslo můžeme brát jako jakousi "masku" - propouští jedničky, takže tam, kde jsou v druhém čísle jedničky se dané číslo opíše, jinak vznikne nula. Takže náš výsledek je opět nulový. Zkusme složitější příklad:

240 && 120
11110000
01111000
-----------
01110000 což je 112.

Takže výsledkem je 112. První číslo v druhém je 0 - takže napíšeme nulu - maska nepropouští. Další je jednička, takže musíme koukat nahoru - a tam je taky jednička, takže opíšeme 1, další dvě taky tak, pak opíšeme 0 (protože maska propouští oboje) a zbylé 3 jsou zase nuly.

Pokud výpočet provedeme opačně:

01111000
11110000
-----------
01110000

Takže výsledek stejný (kontrola správnosti). První číslo v masce je 1, takže opíšeme horní, další tři jsou také opsané. U 5. čísla je maska 0, takže i když je v horním čísle 1, maska ho nepropustí a výsledkem je nula.