Učíme se C (2. díl) - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



C/C++

Učíme se C (2. díl)

21. srpna 2000, 00.00 | Tentokrát o některých základních operátorech v C a o svízelích s postranními efekty.

Operátory

Jazyk C je kromě standardních operátorů vybaven i množstvím takových operátorů, s kterými se zas tak často v jiných jazycích nesetkáváme. Pojďme si tedy ukázat některé operátory, které můžeme v C použít.

aritmetické operátory

+, -, * Nepředpokládám, že by někdo nevěděl, jak tyto operátory použít :-)
/ Celočíselné, nebo reálné, dělení. To, jestli bude provedeno dělení celočíselné, nebo reálné, záleží na typu operandů. Pokud oba operandy budou celočíselného typu, provede se celočíselné dělení. Pokud ovšem alespoň jeden z operandů bude reálného typu, provede se dělení reálné. V případě, že potřebujeme provést reálné dělení na operandech celočíselných typů, musíme jeden z nich přetypovat pomocí operátoru přetypování (viz. dále) na reálný typ.
% Dělení modulo, neboli zbytek po celočíselném dělení.
= Přiřazení.

relační operátory

<, <=, >, >= menší než, menší nebo rovno, atd...
!= nerovnost
== rovnost

logické operátory

&& logický součin (AND)
|| logický součet (OR)
! negace

Jelikož v C (ne však v C++) neexistuje typ realizující logické hodnoty TRUE a FALSE, používá se pro tento účel typ int. Hodnotu FALSE pak představuje číslo 0 a hodnotu TRUE libovolné nenulové číslo.

operátory inkrementace a dekrementace

++ Inkrementace. Zvýší hodnotu operandu o 1.
-- Dekrementace. Sníží hodnotu operandu o 1.

Oba operátory se dají použít jak před svým operandem, tak za ním. Význam je však pokaždé jiný. Pokud operátor uvedeme před operandem, jedná se o tzv. preinkrementaci. To znamená, že hodnota operandu se nejprve zvýší a tato zvýšená hodnota je vrácena jako výsledek operace. Naopak při postinkrementaci je jako hodnota celého výrazu vrácena původní hodnota operandu a pak je teprve operand samotný zvýšen o 1.
int a,b=1;

a = b++;
// Postinkrementace. Výraz b++ je nejdříve vyhodnocen (a jeho hodnota
// přiřazena proměnné a) a pak je teprve inkrementována proměnná b.
// Proměnná a teď tedy má hodnotu 1 a b je rovno 2.

a = ++b;
// Preinkrementace. Nejdříve je inkrementováno b na hodnotu 3.
// Tato hodnota je i výsledkem vyhodnocení výrazu ++b a tedy je
// přiřazena proměnné a. Hodnota a je 3.
operátor přetypování

Ačkoliv se při neshodách typů (např. při přiřazování) provádí implicitní přetypování, jsou situace, kdy potřebujeme explicitně přetypovat jeden typ na jiný. To provedeme pomocí operátoru přetypování. Zápis vypadá tak, že před samotný výraz, který chceme přetypovat, uvedeme v kulatých závorkách jméno nového typu.
int, a=5, b=3;
double c;
c = a / (double)b;
Pokud bychom v uvedeném příkladu nepoužili přetypování, provedlo by se celočíselné dělení. Pro vynucení dělení reálného jsme proto hodnotu výrazu b přetypovali na double.

další operátory

Existuje ještě spousta dalších operátorů, ke kterým se průběžně dostaneme, nicméně bylo by vhodné, abych se ještě zmínil o skupině přiřazovacích operátorů. Často se při programování setkáváme se zápisy, kdy je proměnné přiřazen výraz, ve kterém je tato proměnná použita jako operand nějakého binárního operátoru. Např:
a = a + 1;
b = b * 2;
V C se dají tyto výrazy zapsat i pomocí speciálních přiřazovacích operátorů. Zmíněné příklady by pak vypadaly takhle:
a += 1;
b *= 2;
Tyto operátory jsou vždy tvořeny znakem prováděné operace a znakem '='. Pro dnes zmíněné operace to jsou operátory +=, -=, *=, /=, %=.

postranní efekty

V souvislosti s operátory v C je třeba zmínit se také o jejich postranních efektech. Výsledkem použití operátoru na operandy získáme nějakou konkrétní hodnotu. Například použitím '+' na čísla 2 a 3 získáme hodnotu 5. Operátory ale mohou mít i postranní efekt, který je však u některých operátorů jejich hlavním účelem. Například vyhodnocením výrazu a=2 získáme hodnotu 2, protože výsledkem operace přiřazení je sama hodnota přiřazovaného výrazu. Postranním efektem je pak uložení hodnoty 2 do proměnné a. Problém nastává, když v jednom výrazu aplikujeme na jednu proměnnou více operací s postranním efektem. To proto, že jazyk C nezaručuje pořadí vyhodnocování operandů u většiny binárních operátorů.
int i=2;
i + ++i;
Příklad demonstruje nebezpečnost podobných zápisů. Před vyhodnocením celého výrazu má proměnná i hodnotu 2. Bohužel ale nevíme, který z operandů operátoru + bude vyhodnocen dříve. Bude-li to levý operand, bude mít celý výraz hodnotu 5. Pokud však bude jako první vyhodnocen pravý operand, bude hodnotou výrazu číslo 6. Proto je dobré takovéto výrazy nepoužívat a radši je rozepsat do více kroků tak, aby na jednu proměnnou byl aplikován vždy maximálně jeden operátor s postranním efektem.

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » C/C++  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: