1 / 13

Informatyka I Wykład 5

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.

danton
Download Presentation

Informatyka I Wykład 5

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Informatyka IWykład 5 • Priorytety i kolejność obliczeń • Operator podstawiania • Operatory arytmetyczne • Relacje i operatory logiczne OPERATORY Jerzy Kotowski

  2. 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)); 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. 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 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 Þ 12Arytmetyka!!! • Operator dzielenia modulo:17 % 3 Þ 2 • Oba operandy muszą być typu całkowitego. • Pytanie:jakie wartości ma wyrażeniex%2i kiedy? Jerzy Kotowski

  7. OPERATORY LOGICZNEZmienne logiczne • Język C nie ma zmiennych logicznych. • Konwencja: 0 (ZERO) º FAŁSZ¹0 (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) 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. Jerzy Kotowski

  9. Relacje i operatory przyrównaniaSeria (przykładów) • Wszystkie obiekty w przykładach są typuint • x = 2 < 3; • x = 1bo 2 jest mniejsze od 3. • x = 2 == 3; • x = 0bo 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 zmiennaxma wartość2. Jerzy Kotowski

  10. Relacje i operatory przyrównaniaDrugaseria (przykładów) • Wszystkie obiekty w przykładach są dalej typuint • 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 konstrukcjiifjest teraz operator podstawiania. Efektem tej konstrukcji jest podstawieniex = 2i zwrócenie podstawianej wartości (czyli prawdy). 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 Jerzy Kotowski

  12. Znowu przykłady • z = f(x) && g(y); • Jeżelif(x)zwróci0to gnie 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 xbo2 < 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; 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); Jerzy Kotowski

More Related