Informatyka I Wykład 5

13
Jerzy Kotowski 1 Informatyka I Wykład 5 OPERATORY Priorytety i kolejność obliczeń Operator podstawiania Operatory arytmetyczne Relacje i operatory logiczne

description

Informatyka I Wykład 5. Priorytety i kolejność obliczeń Operator podstawiania Operatory arytmetyczne Relacje i operatory logiczne. OPERATORY. PRIORYTETY I KOLEJNOŚĆ OBLICZEŃ. Operatory wymienione w jednym wierszu mają ten sam priorytet. - PowerPoint PPT Presentation

Transcript of Informatyka I Wykład 5

Page 1: Informatyka I Wykład 5

Jerzy Kotowski 1

Informatyka IWykład 5

OPERATORY

Priorytety i kolejność obliczeń Operator podstawiania Operatory arytmetyczne Relacje i operatory logiczne

Page 2: Informatyka I Wykład 5

Jerzy Kotowski 2

Lp. Operator Łączność15 ( ) [ ] -> . lewostronna14 ! ~ ++ -- - * & sizeof prawostronna13 * / % lewostronna12 + - lewostronna11 << >> lewostronna10 < <= > >= lewostronna9 == != lewostronna8 & lewostronna7 ^ lewostronna6 | lewostronna5 && lewostronna4 || lewostronna3 ?: prawostronna2 = += i t.p. prawostronna1 , lewostronna

Page 3: Informatyka I Wykład 5

Jerzy Kotowski 3

PRIORYTETY I KOLEJNOŚĆ OBLICZEŃ

Operatory wymienione w jednym wierszu mają ten sam priorytet.

Wiersze tabeli ustawione według malejącego priorytetu. Operator jest lewostronnie (prawostronnie) łączny, jeżeli

w wyrażeniu zawierającym co najmniej dwa takie ope-ratory na tym samym poziomie struktury nawiasowej najpierw jest wykonywany operator lewy (prawy).

W języku C nie określa się kolejności obliczania argu-mentów operatora ani kolejności wyznaczania argu-mentów funkcji. Przykłady: x=f()+g(); printf("%d %d\n",++n,power(2,n));

Page 4: Informatyka I Wykład 5

Jerzy Kotowski 4

PRIORYTETY I KOLEJNOŚĆ OBLICZEŃ c.d.

Efekty uboczne (slide effects): przy okazji obliczania wyrażenia pewna zmienna otrzymuje nową war-tość. Przykład: a[i] = i++; - wynik zależy od architektury komputera.

Wniosek: pisanie programów zależnych od archi-tektury komputera należy do złej praktyki programo-wania w każdym języku.

Nawiasy mają najwyższy priorytet, w związku z tym wymuszają kolejność wykonywania operacji.

Page 5: Informatyka I Wykład 5

Jerzy Kotowski 5

OPERATOR PODSTAWIANIA

Operator dwuargumentowy. Priorytet = 2. Lewy argument musi być lvalue. Lvalue jest

wyrażeniem, z którym wiąże się adres w pamięci komputera - to znaczy, że jak się chce coś pod-stawić, to trzeba wiedzieć gdzie. Przykładem lvalue jest nazwa zmiennej, bo wartość każdej zmiennej jest gdzieś zapamiętywana w pamięci.

Wartością działania (operatora) jest podstawiana wartość.

W języku C można napisać: x = y = z = 2; x = 2 + y = z + 3; BŁĄD!!! x = 2 + (y = z + 3); OK

Page 6: Informatyka I Wykład 5

Jerzy Kotowski 6

OPERATORY ARYTMETYCZNE Operatory jednoargumentowe (priorytet 14): + oraz - Przykłady: x = -y; x = +y; Operatory dwuargumentowe:

* / % (priorytet 13)+ - (priorytet 12)

Wnioski: a + b*c a + (b*c) PRIORYTET a / b / c (a / b) / c

ŁĄCZNOŚĆ 7 / 3 * 6 12 Arytmetyka!!! Operator dzielenia modulo: 17 % 3 2 Oba operandy muszą być typu całkowitego. Pytanie: jakie wartości ma wyrażenie x%2 i kiedy?

Page 7: Informatyka I Wykład 5

Jerzy Kotowski 7

OPERATORY LOGICZNEZmienne logiczne

Język C nie ma zmiennych logicznych. Konwencja:

0 (ZERO) FAŁSZ0 (różne od zera) PRAWDA

Przykłady: if(x) - jeżeli x jest różne od zera if(x%2) - jeżeli x jest nieparzyste ! - jednoargumentowy operator logicznej negacji if(!x) - jeżeli x jest równe zero x = !5; - do x podstawimy 0 (zero) x = !!7; - do x podstawimy 1 (jeden)

Page 8: Informatyka I Wykład 5

Jerzy Kotowski 8

OPERATORY LOGICZNERelacje

Operatory relacji – mniejszy: <– mniejszy równy: <=– większy: >– większy równy: >=

Operatory dwuargumentowe. Priorytet = 10. Operatory przyrównania

– równy: ==– różny: !=

Operatory dwuargumentowe. Priorytet = 9.

Page 9: Informatyka I Wykład 5

Jerzy Kotowski 9

Relacje i operatory przyrównaniaSeria (przykładów)

Wszystkie obiekty w przykładach są typu int x = 2 < 3;

x = 1 bo 2 jest mniejsze od 3. x = 2 == 3;

x = 0 bo zdanie “2 jest równe 3” jest fałszywe. x = 2 = 3;

Błąd kompilacji bo w wyrażeniu “2 = 3“ lewy argument nie jest lvalue.

if(x == 2) printf(“Ala ma kota.”); Historyjkę o Ali i jej kocie zobaczymy jeżeli

zmienna x ma wartość 2.

Page 10: Informatyka I Wykład 5

Jerzy Kotowski 10

Relacje i operatory przyrównaniaDruga seria (przykładów)

Wszystkie obiekty w przykładach są dalej typu int y = 2;

Szarzyzna ligowa. x == 2;

Ostrzeżenie kompilatora. Obliczamy wartość wyrażenia “x == 2“ i ją natychmiast odrzucamy.

if(x = 2) printf(“Ala ma kota.”); Historyjkę o Ali i jej kocie zawsze zobaczymy bo w

konstrukcji if jest teraz operator podstawiania. Efektem tej konstrukcji jest podstawienie x = 2 i zwrócenie podstawianej wartości (czyli prawdy).

Page 11: Informatyka I Wykład 5

Jerzy Kotowski 11

OPERATORY LOGICZNESpójniki logiczne

Koniunkcja logiczna, iloczyn logiczny: && Operator dwuargumentowy. Priorytet = 5. Definicja: a && b 1 iff a oraz b jest prawdą. Alternatywa logiczna, suma logiczna: || Operator dwuargumentowy. Priorytet = 4. Definicja: a || b 0 iff a oraz b jest fałszem. Są to jedyne operatory, dla których ANSI określa

kolejność wyznaczania operandów: wpierw LEWY!! Język C wykorzystuje tautologie:

0 && x 0 1 || x 1

Page 12: Informatyka I Wykład 5

Jerzy Kotowski 12

Znowu przykłady

z = f(x) && g(y); Jeżeli f(x) zwróci 0 to g nie zostanie wywołana.

if(x && a/x < 5)… Nigdy nie podzielimy przez zero.

if(2 < x < 5) printf(“Ala ma kota”); Zobaczymy historyjkę o Ali i jej kocie niezależnie

od wartości x bo 2 < x < 5 (2 < x) < 5 1 if(2 < x && x < 5) printf(“Ala ma kota”);

Tak będzie lepiej. Nawiasy nie są potrzebne!! x = !(a<3 && b>=5);

Prawa de Morgana mogą się przydać.

x = a>=3 || b<5;

Page 13: Informatyka I Wykład 5

Jerzy Kotowski 13

SERIA KOŃCZĄCA(zwalająca z nóg)

y = 2;z = 3;x = 2 + y == 1 + z; Jaka będzie wartość zmiennej x?

2 + y == 1 + z (2 + y) == (1 + z) 4 == 4 1 int x,y;

x = y % 4 == 0 && y % 100 !=0 || y % 400 == 0; Jest to definicja roku przestępnego: Rok y jest

przestępny jeżeli dzieli się przez 4 i nie dzieli się przez 100 - chyba, że dzieli się przez 400.x= alfa && beta || gamma;

x = !(y % 4) && (y % 100) || !(y % 400);