38929

38929



49


OPERATORY LOGICZNE

• 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 ==, operatora 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 wartość jest zwracane to, co zostało przypisane — czyli jeden. Drugi natomiast ł>ę<lzie 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 wykonywane są z pewnym przybliżeniem rzadko kiedy dwie zmienne typu float czy double są sobie równe. Dla przykładu:

#include <stdio.h> int main () { float a, b, c;

a ■ lelO;    /* tj. 10 do potęgi 10 •/

b » le-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 */

>

Ol)cjścieni jest porównywanie modułu różnicy liczb. Również i takie błędy kompilator GCC i>otrafi wykrywać    aby to robił należy |xxlać mu argument -Wf loat-equal.

Operatory logiczne

Analogicznie do części operatorów bitowych, w C definiuje się operatory logiczne, mianowicie:

negacja (!),



Wyszukiwarka

Podobne podstrony:
59315 img22 Wyrażenia > Większe niż >= Większe lub równe = = Równe = = = Identyczne !
Strona0 100 ♦    Wybrać InsertWeature OperationHołlow lub ikonę S, ♦
image011 (26) gówna się... £lie równa się... Większe niz... Większe mz lub równe... Mniejsze niz...
51 OPERATOR PRZECINEK a = (b>=c) ? b : c; /* Jeśli b jest większe bądź równe c, to zwróć b. W prz
10 19 równa się4, nie równa się jest większe niż jest większe niż lub równe jest mniejsze niż jest
10 19 równa się nie równa się jest większe niż jest większe niż lub równe jest mniejs
DSCN2621 Operator < Działanie mniejszy mniejszy lub równy większy większy lub równy równy nie
img25 Operatory logiczne $a and $b And (&&) Prawda jeśli $a i $b mają wartość prawda $a o

więcej podobnych podstron