Java - Operatori

  • Published on
    11-Jan-2016

  • View
    26

  • Download
    0

Embed Size (px)

DESCRIPTION

Java - Operatori. Operatori: atribuire aritmetici pe bii . relaionali logici. Operatorii Java. Variabilele i constantele se folosesc pentru stocarea datelor la nivelul aplicaiei. - PowerPoint PPT Presentation

Transcript

  • Java - OperatoriOperatori:atribuirearitmeticipe bii.relaionalilogici

  • Operatorii JavaVariabilele i constantele se folosesc pentru stocarea datelor la nivelul aplicaiei.Operatorii sunt caractere speciale prin care Java este anunat despre operaia ce trebuie s o fac cu operanzii asupra crora acioneaz.Operatorii au un efect i ntorc un rezultat.Ei combin datele n expresii pentru a produce valori noi.

  • Categorii de operatoriOperatorul de atribuire: d unei variabile o valoarea a unui literal sau o valoarea ce se obine ca urmare a evalurii unei expresii.Operatorii aritmetici: aritmetici realizeaz operaiile aritmetice de baz (adunare, scdere, nmulire i mprire) cu operanzii. Pot fi utilizai pentru toate tipurile numerice.Operatorii pe bii: permit interaciunea cu reprezentarea intern pe bii a tipurilor numerice ntregi permind manipularea la nivel de bit. Dac operatorii aritmetici trateaz o valoare numeric unitar, cei pe bii permit modificarea individual a fiecrui bit din valoarea ntreag.Operatorii relaionali: permit compararea a dou valori. Rezultatul comparaiei este logic i poate fi utilizat pentru luarea unor decizii in controlul execuiei programului sau setarea unor valori.Operatori logici (boleeni): pot fi utilizai numai cu valori logice

  • Atribuirea nume = expresie

    expresie din stnga lui = se evalueaz apoi valoarea ei se copiaz n nume orice operator are un efect si un rezultat; la =, efectul este cel de evaluare a expresiei din drepta lui = si copierea ei in nume iar rezultatul este valoarea copiat; deseori, rezultatul, nu este folosit mai departe.modificarea valorii unui operand poart denumirea de efect secundar, n englez side effect; in cazul operatorului = , denumirea este forat deoarece aici efectul de modificare este cel primar; Java are ns o clas ntreag de operatori care produc efecte secundare (incrementarea, decrementarea,atribuirea compus).atribuirea poate fi i multipl (nume1=nume2=expresie), situaie n care asociativitatea operatorului de atribuire este de la dreapta la stnga.

  • Operatorii aritmeticirealizeaz operaiile aritmetice de baz; operanzii trebuie sa fie numerici (literali sau variabile);n expresiile n care particip ordinea evalurii lor este dat de prioritatea i asociativitatea lor. *, / i % au prioritatea mai mare dect + i -, motiv pentru care aceste operaii vor fi evaluate nainte de adunare i scdere;parantezele rotunde modific prioritatea evalurilor aritmetice, aceasta ncepnd de la parantezele cele mai interioare;mprirea ntre ntregi ntoare rezultat ntreg (eventuala parte zecimal este ignorat);mprirea ntreag cu 0 genereaz o excepie;mprirea real cu 0. ntoarce infinit (Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY) sau rezultat nenumerice (Not A Number Double.NaN).

  • Promovarea si fortarea de tipconversie: trecerea de la o reprezentare intern a unui tip de date la o alta;promovare: conversie ctre un tip cu domeniu de valori mai larg;forare: conversie ctre un tip cu domeniu de valori mai ngust, are forma nume = (tip_destinatie) valoare;toate operaiile aritmetice intregi se fac cu tipurile int sau long, valorile byte, char sau short fiind automat promovate la int nainte de efectuarea operaiilor, rezultatul fiind i el un int ; similar, dac un operand este de tipul long, iar cellat nu, acesta va fi automat promovat la long, iar rezultatul final va fi long. la reali valorile sunt implicit de tipul double, cu excepia cazului n care este explicit specificat tipul float; intr-o expresie aritmetica cu mai multe tipuri, ca urmare a promovarilor automate, rezultatul final este cel al tipului cu domeniul cel mai mare; promovrile atutomate se face astfel: char \ --> int --> long --> float --> doublebyte --> short /

  • Incrementare (++) si decrementare (--)operatorul ++ crete cu 1 valoarea operandului operatorul -- scade cu 1 valoarea operanduluiexist dou forme de scriere:

    incrementarea i decrementarea sunt operatori unari (acioneaz asupra unui singur operand), au efecte secundare, iar rezultaul lor poate fi folosit n continuare n expresii. Rezlultatul poate fi valoarea operandului nainte (la formele post-fixate) sau dup (la formele pre-fixate) ce incrementarea sau decremantarea a avut loc.

    int i = 1, j;j = ++i; // prefixat: i se incrementeaz // apoi de atribuie valoarea lui j

    j = i++; // postfixat: se atribuie // valoarea lui j, apoi se // incrementeaz i

  • Operatori relationali Operatorii relaionali, unori numii i de comparare a expresiilor, se folosesc la testarea unor condiii ntre dou expresii i ntorc un rezultat de tipul boolean. Sintaxa general a unei comparaii este: rezultat = expresie1 operatorrelational expresie2Deseori, operatorii relaionali se folosesc mpreun cu cei logici pentru a forma expresii logice complexe.

  • Operatori logici (booleeni )operatorii logici, uneori numii i booleeni, trebuie s aib operanzi booleeni (adic de tipul boolean) i genereaz rezultate booleene;expresiile care conin operatori logici se evalueaz cu scurtcircuitare; evaluarea se face de la stnga la dreapta (aceast ordine de evaluare este garantat numai pentru operatorii logici) i imediat ce valoarea expresiei logice devine cunoscut evaluarea celorlali operanzi se termin;

    exist i operatori logici care se evalueaz fr scurtcircuitare; ei au o scriere diferit;permit formarea de expresii logice pe baza rezultatelor operatorilor relaionali

  • Operatori pe bitioperanzii pot fi de orice tip de ntreg i au ca rezultat o valoarea ntreagoperatorii pe bii trateaz operanzii sub forma unui ir de bii (n baza 2) i nu sub forma unui singure valori n baza 10.; irurile se obine prin transcrierea numerelor din baza 10 n baza 2; operatorii pe bii acioneaz asupra celui de al N-elea bit al operanzilor folosind o funcie boolean pentru a genera un rezultat la nivelul aceluiai bit N.

  • Atribuirea compusaoperatorul de atribuire poate fi combinat cu orice operator aritmetic binar astfel nct n loc de:(expresie1) = (expresie1) op (expresie2) se poate scrie :expresie1 op = expresie2scrierea poate fi utilizat cu toi operatorii binari.toat aceast familie de operatori de atribuire va produce i efecte secundare deoarece genereaz un rezultat dar i modific valoarea operandului din stnga.

    b += a; //b = b + ab -= a; //b = b - ab *= a; //b = b * ab /= a; //b = b / ab %= a; //b = b % a

  • Prioritatea si asociativitatePrioritatea determin ordinea de rezolvare a operatorilor; operatorii cu prioritate cea mai mare se rezolva prma oara; prioritatea cea mai mare este 1, cea mai mica 13Dac ntr-o expresie avem mai muli operatori consecutivi de aceeai prioritate, atunci se aplic regula asociativitaii; asociativitatea este de la sanga la dreapta sau de la dreapta la stanga;Utilizarea parantezelor rotunde redefinete prioritile; rezolvarea se incepe de la paratezele cele mai interioare;

  • Intrebari ? (clic pt. raspunsuri)Prin ce este caracterizat orice operator?Care dintre conversii nu se face automat in Java?Care operatori produc efecte secundare?Care dintre regulile de evaluare se aplica prima oara: prioritatea sau asociativitatea?> Prin efect si rezultat> Fortarea de tip> Atribuirea (simpla sau compusa), incrementarea si decrementarea> prioritatea

  • Aplicatii 1 Creati o noua aplicatie cu urmatorul cod:public class Operatori { public static void main(String args[]) { int a, b, c, d, e, f, g; double da, db, dc, dd, de; boolean ba, bb, bc, bd; System.out.println("Aritmetica cu int"); a=1+1; //adunare b=a*3; //inmultire c=b/4; //impartire d=c-a; //scadere e=-d; //- unar System.out.println("a = " + a); System.out.println("b = " + b); System.out.println("c = " + c); System.out.println("d = " + d); System.out.println("e = " + e); System.out.println("\nAritmetica cu double"); da=1.+1.; db=da*3.; dc=db/4.; dd=dc-da; de=-dd;

  • Aplicatii 1 (continuare 1)System.out.println("da = " + da);System.out.println("db = " + db);System.out.println("dc = " + dc);System.out.println("dd = " + dd);System.out.println("de = " + de); System.out.println("\nAritmetica modulo"); a=42; a=42.65; System.out.println(a + "%10 = " + a%10); System.out.println(da + "%10 = " + da%10); System.out.println("\nConversii"); //fortarea conversiei de la double la int System.out.println("(int)"+ da + " = "+ (int)da); System.out.println("\nOperatori logici"); ba = false; bb = true; bc = da > db; //? 42.5 > 6 = true bd = ba && bc || bc; // o expresie logica System.out.println(ba + " && " + bb + " || " +bc + " = " + bd); /* bd = ba & 1/(e+d) < 3; //NU se face scurtcircuitare pt operandul 2 * aplicatia va crapa */

  • Aplicatii 1 (continuare 2) bd = ba && 1/(e+d) < 3; //se face scurtcircuitare pt operandul 2 System.out.println(ba + " && 1/(" + e + d + ") < 3 = " + bd); System.out.println("\nOperatori pe biti"); a = 3; // 0011 in binar b = 6; // 0110 in binar c = a | b; d = a & b; e = a ^ b; f = (~a & b) | (a & ~b); //epresie cu operatori pe biti g = ~a & 0x0f; System.out.println("a = " +Integer.toBinaryString(a)); //11 System.out.println("b = " +Integer.toBinaryString(b)); //110 System.out.println("c = " +Integer.toBinaryString(c)); //111 System.out.println("d = " +Integer.toBinaryString(d)); //10 System.out.println("e = " +Integer.toBinaryString(e)); //101 System.out.println("f = " +Integer.toBinaryString(f)); //101 System.out.println("g = " +Integer.toBinaryString(g)); //1100 System.out.println(Integer.toBinaryString(a)+"
  • Aplicatii 1 (continuare 3)Introduceti aplicatia iar dupa rularea ei incercati sa intelegi rezultatele afisate pe baza comentariil