![]() |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() ![]() ![]() |
|
Priorita | Operátory | Asociativita |
1 | . -> () [] | zleva |
2 | + - ++ -- ! ~ (přetypování) & * sizeof | zprava |
3 | * / % | zleva |
4 | + - | zleva |
5 | << >> | zleva |
6 | < > <= >= | zleva |
7 | == != | zleva |
8 | & | zleva |
9 | ^ | zleva |
10 | | | zleva |
11 | && | zleva |
12 | || | zleva |
13 | ?: | zprava |
14 | = += -= *= /= %= <<= >>= &= |= ^= | zprava |
15 | , | zleva |
Něteré operátory už známe. Z první skupiny je to volání funkce, operátor (). Prvním operandem je ukazatel na funkci (v našem případě to byl zatím vždy, název funkce, ale to je v Céčku vlastně konstantní ukazatel do kódu programu v paměti), případnými dalšími operandy jsou parametry funkce. V druhé skupině jsme se setkali s přetypováním. Známe i operátor sizeof, ten má syntaxi podobnou volání funkce s jedním parametrem a spočítá velikost výrazu nebo i typu v paměti.
printf("int má %i byty a celočíselná konstanta také %i\n", sizeof(int), sizeof(5));
Ve třetí a osmé skupině jsou operátory * a &, dereference ukazatele a adresa, známe také ve 14. skupině =. Rovnítko, operátor přiřazení, používáme především kvůli jeho vedlejšímu efektu (do levého operandu se přiřadí hodnota pravého), ale občas se hodí i jeho návratová hodnota, kterou je pravý operand.
i = j = k = 0;
Díky asociativitě zprava se výraz vyhodnotí jako
i = (j = (k = 0));
a jediným příkazem jsme tak vynulovali tři proměnné. Nejprve se do k uložila 0, hodnotou výrazu k = 0 je 0, která se tak dostane i do j a stejným způsobem nakonec i do proměnné i.
Nejznámějšími operátory jsou ty aritmetické. Ve druhé skupině jsou unární + a -, například +5 nebo -128 a ve třetí *, / a %. Hvězdičkou se násobí, lomítkem dělí a procento je zbytek po celočíselném dělení. Je důležité vědět, že / je jak celočíselné, tak i reálné dělení. Je-li alespoň jeden z operandů reálného typu, použije se dělení reálné, v opačném případě celočíselné. Chceme-li reálně dělit dvě celá čísla, je třeba použít přetypování nebo za konstantou explicitně uvést desetinnou tečku.
int i = 7, j = 2; double f; f = 7 / 2; printf("%f\n", f); /* 3.000000 nepříjemné překvapení ? */ f = 7 / 2.0; printf("%f\n", f); /* 3.500000 */ f = i / j; printf("%f\n", f); /* 3.000000 nepříjemné překvapení ? */ f = i / (double) j; printf("%f\n", f); /* 3.500000 */
V programech se často vyskytují konstrukce typu i = i + 1 nebo i = i * 2, tedy kombinace přiřazení s jedním dalším operátorem, kde levým operandem přiřazení i aritmetického operátoru je jedna a ta samá proměnná. Céčko zde programátorům ulehčuje život a nabízí sadu operátorů ze 14. skupiny. Místo i = i + 1 tak lze psát i += 1, místo i = i * 2 píšeme i *= 2 a podobně.
Úplně nejčastěji se používá zvětšení nebo zmenšení o jedničku. Zápis i += 1 nebo i -= 1 by se někomu mohl zdát stále moc dlouhý, proto C nabízí operátory ++ a --. Místo i = i + 1 lze psát i += 1 nebo také i++, případně ++i. Výraz i = i - 1 zcela analogicky nahradíme i -= 1 nebo i--, případně --i. Mezi prefixovou a postfixovou verzí operátorů ++ a -- je následující rozdíl: ++i nejprve zvětší proměnnou i o jedničku a výsledná hodnota i je návratovou hodnotou celého výrazu. Naopak u i++ je návratovou hodnotou původní i.
int i = 5; printf("%i\n", i++); /* 5 */ /* v i je teď 6 */ printf("%i\n", ++i); /* 7 */
V příštím díle probereme logické operátory a dostaneme se k podmínce.
|
||
DISCUSSION
For this item is no comments. |
||
Add comment is possible for logged registered users.
|
1. |
Pacman linux Download: 5004x |
2. |
FreeBSD Download: 9214x |
3. |
PCLinuxOS-2010 Download: 8700x |
4. |
alcolix Download: 11096x |
5. |
Onebase Linux Download: 9809x |
6. |
Novell Linux Desktop Download: 0x |
7. |
KateOS Download: 6372x |
1. |
xinetd Download: 2535x |
2. |
RDGS Download: 937x |
3. |
spkg Download: 5040x |
4. |
LinPacker Download: 10209x |
5. |
VFU File Manager Download: 3311x |
6. |
LeftHand Mała Księgowość Download: 7340x |
7. |
MISU pyFotoResize Download: 2973x |
8. |
Lefthand CRM Download: 3673x |
9. |
MetadataExtractor Download: 0x |
10. |
RCP100 Download: 3270x |
11. |
Predaj softveru Download: 0x |
12. |
MSH Free Autoresponder Download: 0x |