Kurs programowania w C cz. 35

Nasza ocena:

5
Wyświetleń: 714
Komentarze: 0
Notatek.pl

Pobierz ten dokument za darmo

Podgląd dokumentu
Kurs programowania w C cz. 35 - strona 1

Fragment notatki:

OPERATORY LOGICZNE 49 • większe lub równe (“ =”). Wykonują one odpowiednie porównanie swoich argumentów i zwracają jedynkę jeżeli warunek jest spełniony lub zero jeżeli nie jest. Częste błędy Osoby, które poprzednio uczyły się innych języków programowania, często mają nawyk używania w instrukcjach logicznych zamiast operatora  porównania  ==, ope- ratora  przypisania  =. Ma to często zgubne efekty, gdyż przypisanie zwraca wartość przypisaną lewemu argumentowi. Porównajmy ze sobą dwa warunki: (a = 1) (a == 1) Pierwszy z nich zawsze będzie prawdziwy, niezależnie od wartości zmiennej a! Dzieje się tak, ponieważ zostaje wykonane przypisanie do a wartości 1 a następnie jako war- tość jest zwracane to, co zostało przypisane — czyli jeden. Drugi natomiast będzie prawdziwy tylko, gdy a jest równe 1. W celu uniknięcia takich błędów niektórzy programiści zamiast pisać a == 1 piszą 1 == a, dzięki czemu pomyłka spowoduje, że kompilator zgłosi błąd. Warto zauważyć, że kompilator GCC potrafi w pewnych sytuacjach wychwycić taki błąd. Aby zaczął to robić należy podać mu argument -Wparentheses. Innym błędem jest użycie zwykłych operatorów porównania do sprawdzania relacji pomiędzy liczbami rzeczywistymi. Ponieważ operacje zmiennoprzecinkowe wykonywa- ne są z pewnym przybliżeniem rzadko kiedy dwie zmienne typu float czy double są sobie równe. Dla przykładu: #include  int main () { float a, b, c; a = 1e10; /* tj. 10 do potęgi 10 */ b = 1e-10; /* tj. 10 do potęgi -10 */ c = b; /* c = b */ c = c + a; /* c = b + a (teoretycznie) */ c = c - a; /* c = b + a - a = b (teoretycznie) */ printf("%d\n", c == b); /* wypisze 0 */ } Obejściem jest porównywanie modułu różnicy liczb. Również i takie błędy kompila- tor GCC potrafi wykrywać — aby to robił należy podać mu argument -Wfloat-equal. Operatory logiczne Analogicznie do części operatorów bitowych, w C definiuje się operatory logiczne, mianowicie: • negacja (!), ... zobacz całą notatkę



Komentarze użytkowników (0)

Zaloguj się, aby dodać komentarz