Forum ::BIOTECHNOLOGIA:: Strona Główna ::BIOTECHNOLOGIA::
Forum studentów kierunku biotechnologia Politechniki Śląskiej
 
 FAQFAQ   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy   GalerieGalerie   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Pseudokurs: Typy, operatory, wyrażenia

 
To forum jest zablokowane, nie możesz pisać dodawać ani zmieniać na nim czegokolwiek   Ten temat jest zablokowany bez możliwości zmiany postów lub pisania odpowiedzi    Forum ::BIOTECHNOLOGIA:: Strona Główna -> Informatyka
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
kot-niepłot




Dołączył: 29 Lis 2005
Posty: 324
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Gliwice BioAut

PostWysłany: Sob 19:05, 28 Paź 2006    Temat postu: Pseudokurs: Typy, operatory, wyrażenia

Typy, wyrażenia, operatory

Typy – myślę że to jest dość jasne, ale chcę coś dopowiedzieć.
Typy short, int, long, long long są typami całkowitymi i każda operacja matematyczna z nimi daje liczbę całkowitą (short jest najmniejszy(od –32768 do 32767), int zależny od kompilatora (zwykle taki jak long), long long jest największy).
Liczba 5.0 jest normalnie typu double. Żeby była typem float, należy ją rzutować: (float)5.0 lub float(5.0) albo zrobić po prostu: 5.0f. Typu long double jest liczba 5.0l (mała litera L). Te modyfikatory wymagają kropki w liczbie (napisanie 5f jest błędem) ale rzutowanie już tego nie wymaga.
Podobnie: 5 jest int'em; 5l jest typu long, itp: 5u, 5ul, 5ll, 5ull; 5s nie istnieje.
Jeśli jeden z typów jest unsigned, wyrażenie jest typu unsigned (np. 2u-3 powoduje "przekręcenie licznika" – o tym później).
Jeśli jednym typem jest float, wyrażenie jest floatem.
Jeśli jednym typem jest double, wyrażenie jest typu double. Long double jest "najsilniejsze", potem double, potem float, potem unsigned; long jest "silniejszy" od short.

Operatory:
Operatory matematyczne: +, -, *, / - co robią, każdy powinien wiedzieć Wink
(Ad. znak dzielenia: jeśli obie liczby są całkowite, wynik jest całkowity, zaokrąglony w dół).
Przykład: 5/6 (równe 0); a*2; x+y; 5.0/6;
% - ciekawy operator (zwany modulo), który zwraca resztę z dzielenia pierwszej liczby przez drugą liczbę (n), (zwraca wartości 0,1,2,...,n-1).
Czyli np. 534%10=4; 43%2=1; 6%2=0; 5%8=5;
Modulo działa tylko dla liczb całkowitych.

Operatory przypisania: =, +=, -=, *=, /= (matematyczne), &=, |=, ^=, <<=, >>= (bitowe, rzadziej używane).
Pierwszy oblicza lewą stronę i przyporządkowuje prawej.
Wszystkie oprócz pierwszego działają tak: x += (wyrażenie); <=> x = x+(wyrażenie);
Te operatory zwracają wartość zmiennej po przypisaniu (np. a=5; x = 10/a; - zostanie obliczone wyrażenie 10/a, przypisane do x, zwrócona wartość 2).
Przykład: x = 4; y+=3;

Operatory porównania: <, >, <=, >=, !=, ==. Ten ostatni sprawia najwięcej kłopotu. Można nim porównywać całkowite ze zmiennopozycyjnymi, signed z unsigned, ale nie float z doublem! (Błędu nie będzie, ale będzie zły wynik; pozostałymi operatorami można je porównywać). Operatory te zwracają wartość 1 jeśli porównanie jest prawdziwe, 0 jeśli fałszywe.
Przykład: x<=4; y==5.0f;

Operatory bitowe: &, |, ^, <<, >>, ~. Ich opis na razie sobie podaruję.

Operatory logiczne:
&& - "i" – zwraca 1 jeśli obie strony są prawdziwe (różne od zera). (Ciekawostka: jeśli pierwsze wyrażenie jest fałszywe (równe 0), drugie nie jest już sprawdzane – wynik i tak jest fałszywy).
|| - "lub" – zwraca 1 jeśli którakolwiek ze stron jest prawdziwa (jeśli pierwsza jest prawdziwa, druga nie jest sprawdzana).
! – "nie" – zmiana wartości logicznej na przeciwną (1 na 0, 0 na 1)
Przykłady: (dla x=4)
x==4 && x>2 – zwróci 1
!x – zwróci 0
x=2 || 0 – zwróci 1 (tu nie ma błędu Wink )

Operator ?: - jego działanie było opisane na wykładzie lub w innym pseudokursie Wink
Inkrementacja: ++ oraz -- (zwiększenie lub zmniejszenie o 1). Oklepany jest problem czym się różni x++ od ++x, ale mam nadzieję że już wszyscy wiedzą. Właśnie tak powstała nazwa C++ Wink . Słyszałem o takim combo jak a+++b – wynik: dodanie a do b, i zwiększenie się a.

Hierarcha operatorów:
Jedne są "ważniejsze" od innych – operacje z ich użyciem zostaną wykonane najpierw, czyli: 2+2*2 wyniesie 6, ale (2+2)*2 wyniesie 8.
Oto prosta hierarchia od najmniej ważnych:
Wszelkie przyporządkowania -> ?: -> || -> && -> ==, != -> reszta porównań -> +, - -> *, /, % -> -(jako zmiana znaku), ++, --, ! -> nawiasy.
Pełna lista jest na [link widoczny dla zalogowanych] (cppreference.com ogólnie polecam – bardzo techniczna, ale wyczerpująca). Dobrze jest pamiętać taką hierarchię, ale nie każdemu to się zdarza dlatego w wątpliwych przypadkach wyrażenie lepiej otoczyć nawiasami.

Wyrażenia
Wyrażeniem można nazwać wszystko, co zwraca jakąś wartość – zwykle liczbową.
Przykładowe wyrażenia:
5; // zwraca wartość 5
5<6; // zwraca wartość 1
a+2; // zwraca sumę wartości a i 2
x = a+b; c=sqrt(a*a+b*b); a = (2>4);
Za pomocą operatorów z wyrażeń prostych (np 5; x) można tworzyć wyrażenia złożone (5+x);

Owo przekręcenie licznika: jeśli nadamy zmiennej jej maksymalną wartość (np. short x = 32767; ) a następnie dodamy 1, zmienna przyjmie wartość najmniejszą (czyli ++x == -32768). Kolejne dodawanie jedynek będzie działać już jak normalne dodawanie 1 do liczby ujemnej. 1ul – 2l – skutkuje przekręceniem licznika w drugą stronę (unsigned mieści od 0 do (2^32)-1, (tutaj ^ znaczy "do potęgi")), czyli wynik wyniesie (2^32)-2.


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:   
To forum jest zablokowane, nie możesz pisać dodawać ani zmieniać na nim czegokolwiek   Ten temat jest zablokowany bez możliwości zmiany postów lub pisania odpowiedzi    Forum ::BIOTECHNOLOGIA:: Strona Główna -> Informatyka Wszystkie czasy w strefie EET (Europa)
Strona 1 z 1

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach

fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
Regulamin