Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ

Veprimet aritmetike. Operacionet e caktimit të zgjeruar

Për llojet e të dhënave numerike të plota - long, int, short, char dhe byte - përcaktohet një grup shtesë operatorësh me të cilët mund të kontrolloni dhe modifikoni gjendjen e biteve individuale të vlerave përkatëse. Tabela 4.2 ofron një përmbledhje të këtyre operatorëve. Operatorët aritmetikë bit punojnë me çdo bit si një vlerë e pavarur.

Tabela 4.2. Operatorët aritmetikë bit

Operatori

Rezultati

Operatori

Rezultati

pjesërisht DHE(DHE)

Bitwise DHE (DHE) me detyrë

pjesërisht OSE(OSE)

pjesërisht OSE (OSE) me detyrë

OR ekskluzive bitwise(XOR)

ekskluzive bit OSE (XOR) me detyrë

zhvendosja në të djathtë

zhvendosje djathtas me detyrë

zhvendosja djathtas i mbushur me zero

zhvendosja djathtas e mbushur me zero me caktim

Zhvendosje majtas

turn majtas me detyrë

mohim unar në pjesë bit(JO)

Tabela 4.3 tregon se si secili prej operatorëve aritmetikë bit ndikon në kombinimet e mundshme të biteve të operandëve të tyre.

Tabela 4.3

Zhvendosje majtas

Operatori<< выполняет сдвиг влево всех битов своего левого операнда на число позиций, заданное правым операндом. При этом часть битов в левых разрядах выходит за границы и теряется, а соответствующие правые позиции заполняются нулями.

Zhvendos në të djathtë

Operatori >> do të thotë zhvendosje djathtas në Java. Ai i lëviz të gjitha pjesët e operandit të tij të majtë në të djathtë sipas numrit të pozicioneve të specifikuara nga operandi i djathtë. Kur pjesët e operandit të majtë kalojnë pozicionin më të djathtë të fjalës, ato humbasin. Kur zhvendoset djathtas, shifrat e liruara të larta (majtas) të numrit të zhvendosur plotësohen me përmbajtjen e mëparshme të shifrës së nënshkruar. Kjo bëhet në mënyrë që kur zhvendosen në të djathtë, numrat të ruajnë shenjën e tyre.

Zhvendosje e panënshkruar djathtas

Shpesh kërkohet që, kur zhvendoset djathtas, biti i shenjës të mos zgjerohet dhe shifrat e lira të majta të mbushen me zero. Operatori i panënshkruar i ndryshimit djathtas >>> përdoret për këtë qëllim.

4.3. Operatorët relacionalë

Për të qenë në gjendje të krahasohen dy vlera, Java ka një grup operatorësh që përshkruajnë lidhjen dhe barazinë. Lista e operatorëve të tillë është paraqitur në tabelën 4.4.

Tabela 4.4

Operatori

Rezultati

barazohet

jo të barabartë

më shumë

më pak

më shumë ose të barabartë

më pak ose të barabartë

Vlerat e çdo lloji, duke përfshirë numrat e plotë, numrat realë, simbolet, booleans dhe referencat, mund të krahasohen duke përdorur operatorin e barazisë == dhe operatorin e pabarazisë! =. Vini re se në Java, testimi i barazisë shënohet me sekuencën (==). Një shenjë (=) është operatori i caktimit.

Operatorët e marrëdhënieve mund të aplikohen vetëm për operandët e llojeve numerike. Me ndihmën e tyre, ju mund të punoni me llojet e numrave të plotë, realë dhe të karaktereve. Secili prej operatorëve relacionalë kthen një rezultat boolean, d.m.th. ose e vërtetë ose i rremë.

Shënime leksionesh Java. Sesioni 4

(asnjë) (asnjë) ::
(asnje)
(V. Fesyunov)

Operatorët Java

Shumica e operacioneve Java janë të thjeshta dhe intuitive. Këto janë operacione të tilla si +, -, *, /,<,>dhe të tjera.Operacionet kanë radhën e tyre të ekzekutimit dhe prioritetet. Pra në shprehje

fillimisht kryhet shumëzimi dhe më pas mbledhja, pasi shumëzimi ka përparësi më të madhe se mbledhja. Në shprehje

fillimisht llogaritet a + b, dhe më pas c zbritet nga rezultati, pasi rendi i këtyre veprimeve është nga e majta në të djathtë.

Por operacionet Java kanë veçoritë e tyre. Pa hyrë në një përshkrim të hollësishëm të operacioneve më të thjeshta, le të ndalemi në veçoritë.

Le të fillojmë me detyrat... Ndryshe nga një numër i gjuhëve të tjera programimi në Java, caktimi nuk është një operator, por një operacion. Semantika e këtij operacioni mund të përshkruhet si më poshtë.

  • Operacioni i caktimit shënohet me simbolin "=". Ai llogarit vlerën e operandit të tij të djathtë dhe ia cakton operandit të majtë, dhe si rezultat kthen vlerën e caktuar. Kjo vlerë mund të përdoret nga operacione të tjera. Një sekuencë e disa detyrave kryhet nga e djathta në të majtë.

Në rastin më të thjeshtë, gjithçka duket si zakonisht.

Këtu ndodh pikërisht ajo që nënkuptojmë intuitivisht - llogaritet shuma e a dhe b, rezultati futet në x. Por këtu janë dy shembuj të tjerë.

Në të parën, së pari 1 futet në b, rezultati i operacionit është 1, pastaj ky rezultat futet në a. Në shembullin e dytë, shuma e a dhe b llogaritet dhe rezultati humbet. Është e pakuptimtë, por sintaksisht e vlefshme.

Operacionet e krahasimit

Këto janë operacione>,<, >=, <=, != и ==. Следует обратить внимание, что сравнение на равенство обозначается двумя знаками "=". Операндами этих операций могут быть арифметические данные, результат — типа boolean.

Operacionet e rritjes, zvogëlimit

Këto janë operacione ++ dhe -. Pra, y ++ (rritje) është stenografi për y = y +1, në mënyrë të ngjashme me veprimin e zvogëlimit (-).

Por ka një hollësi me këto operacione. Ato vijnë në dy forma, parashtesa (++ y) dhe pasfiks (y ++). Efekti i këtyre operacioneve është i njëjtë - ato rrisin (veprimet e zvogëlimit - zvogëlojnë) operandin e tyre me 1, por rezultati i tyre është i ndryshëm. Forma e prefiksit si rezultat jep vlerën e operandit tashmë të ndryshuar me 1, dhe forma e pasfiksit jep vlerën e operandit përpara ndryshimit.

A = 5; x = a ++; y = ++ a;

Në këtë fragment, x do të vendoset në 5 dhe y në 7.

Operacioni i ndarjes së numrave të plotë

Duhet pasur parasysh se pjesëtimi i një tërësie me një tjetër prodhon një të tërë dhe nuk rrumbullakoset, por e hedh poshtë pjesën thyesore.

Pjesa e mbetur e ndarjes (vlera e modulit)

Java ka operatorin%, i cili tregon pjesën e mbetur të një ndarjeje.

Operacionet e caktimit të zgjeruar

Përveç operacionit të zakonshëm "=" në Java, ekzistojnë operacione + =, - =, * =, / =, etj. Këto janë shënime stenografike. Pra, a + = b është plotësisht ekuivalente me a = a + b. Në mënyrë të ngjashme, me operacione të tjera të tilla.

Operacionet logjike

! - mohim && - logjik "dhe" || - logjike "ose"

Operandët e këtyre operacioneve duhet të jenë të tipit boolean, rezultati është boolean. && dhe || kanë një veçori - operandi i tyre i djathtë mund të mos llogaritet nëse rezultati dihet tashmë nga operandi i majtë. Pra, nëse operandi i majtë i operacionit && është false, atëherë operandi i djathtë nuk do të llogaritet, pasi rezultati është ende i rremë.

Kjo veçori duhet të merret parasysh, veçanërisht kur operandi i djathtë përmban një thirrje për ndonjë funksion.

Operacione logjike bitwise

Këto janë operacione

& - bit "dhe" | - bitwise "or" ^ - bitwise "exclusive or" ~ - bitwise mohim

Ato ekzekutohen për çdo palë bit të operandëve të tyre.

Operacionet e ndërrimit

<< — сдвиг влево >> - zhvendosje djathtas >>> - zhvendosje e panënshkruar djathtas

Këto operacione zhvendosin vlerën e operandit të tyre të majtë me numrin e biteve të specifikuara nga operandi i djathtë.

Operacioni i kushtëzuar

Ky është i vetmi operacion tresh, d.m.th. një operacion që ka tre operandë. Prandaj, jo një shenjë operacioni përdoret për të, por dy.

<условие> ? <выражение1> : < выражение2>

Nëse<условие>është e vërtetë, rezultati është< выражение1>, ndryshe< выражение2>.

Për shembull, "a< b ? a: b" вычисляет минимум из a и b.

Operacioni i derdhjes

Ky është një operacion shumë i rëndësishëm. Si parazgjedhje, të gjitha konvertimet që mund të çojnë në probleme janë të ndaluara në Java. Pra, nuk mund t'i caktoni një vlerë të gjatë një operandi int. Në rastet kur është ende e nevojshme, duhet të vendosni një konvertim të qartë të llojit.

Për shembull, supozoni se metoda f (...) kthehet gjatë.

int x = (int) f (10);

Këtu (int) është një operacion i konvertimit të tipit. Një operacion i konvertimit të tipit tregohet me emrin e tipit të mbyllur në kllapa.

Ky operacion zbatohet jo vetëm për llojet bazë, por edhe për klasat. Ne do ta hedhim një vështrim më të afërt në këtë kur të shohim trashëgiminë.

Literale (konstante)

Aritmetika

Shembuj të konstantave aritmetike

10 - 010 është 8 - 0123 është 83 (1 * 64 + 2 * 8 + 3) - 0x10 është 16 - 0x123 është 291 (1 * 256 + 2 * 16 +3) - 1e5 është 100000 - 3 është 1,23 e-.

Për të treguar llojin e një konstante, përdoren prapashtesa: l (ose L) - e gjatë, f (ose F) - noton, d (ose D) - dyfish. Për shembull,

1L është një, por e tipit të gjatë.

Literale Boolean

Literalet Boolean janë të vërteta dhe të rreme

Literalet e vargut

Shkruhen me thonjëza të dyfishta, për shembull

"Kjo është një varg"

Fjalë për fjalë karaktere

Ato shkruhen me apostrofa, për shembull "F", "w".

Në fjalë për fjalë vargjet dhe karakteret, ka rregulla për të shkruar speciale. personazhet. Së pari, ekziston një grup specialesh të paracaktuara. personazhet. Kjo

- "\ n" - fundi i rreshtit (ushqimi i linjës) - "\ r" - kthimi i karrocës - "\ t" - skeda

dhe një sërë të tjerash.

Së dyti, ju mund të shkruani në mënyrë eksplicite kodin e karakterit (ju vetëm duhet ta dini atë). Kodi zakonisht shkruhet në sistemin oktal: "\ 001" është një karakter me kodin 1, etj.

Deklaratat

Operatori - Shprehje

Sintaksë

<выражение>;

Një operator i tillë përbëhet nga një shprehje, në fund është ";". Veprimi i tij është të vlerësojë shprehjen, vlera e llogaritur nga kjo shprehje humbet. ato. zakonisht një shprehje e tillë përmban një operator caktimi, megjithëse kjo nuk kërkohet nga sintaksa.

A = 0; x = (a> b? a: b); cnt ++;

Deklaratë e kushtëzuar (nëse)

Sintaksë

nese (<условие>) <оператор1>

Këtu<условие>Është një shprehje logjike, d.m.th. një shprehje që kthen true ose false. Siç mund ta shihni nga sintaksa, pjesa tjetër është fakultative. Ka një operator pas if-it dhe pas tjetrit. Nëse keni nevojë të vendosni disa operatorë atje, atëherë duhet të vendosni bllokoj . Blloko fillon me "(" dhe mbaron me ")".

Në Java, është zakon të vendosni gjithmonë një bllok, edhe nëse ka një deklaratë pas if ose else.

Nëse (a> b) (x = a;) tjetër (x = b;) nëse (flamur) (flamur = false; init ();)

Në shembullin e fundit, flamuri është një variabël ose fushë boolean, init () është një metodë e quajtur nëse flamuri është i vërtetë (ata thonë "nëse flamuri është vendosur").

Deklarata e kthimit (e parë tashmë)

Operatori i ciklit sipas parakushtit (ndërsa)

Sintaksë

Derisa (<условие>) <оператор>

Ashtu si me deklaratën if, është e zakonshme në Java<оператор>mbyllni në mbajtëse kaçurrelë.

Int i = 0; ndërsa (më shumë) (x / = 2; më shumë = (++ i< 10); }

Në këtë shembull, më shumë duhet të jetë një ndryshore ose fushë boolean, x disa ndryshore ose fushë aritmetike. Cikli kryhet 10 herë.

Operatori i ciklit pas gjendjes (bëj ndërkohë)

Sintaksë

Bëni<оператор>derisa (<условие>);

Operatori i ciklit sipas kushtit postar ndryshon nga operatori i ciklit sipas parakushteve vetëm në atë që përsëritja e ciklit ekzekutohet gjithmonë në të të paktën një herë, ndërsa në operatorin parakusht mund të mos ketë një përsëritje të vetme të ciklit (nëse kushti është menjëherë false).

Int i = 0; bëj (x \ = 2; më shumë = (++ i< 10); } while (more);

Operatori i ciklit numërues (për)

Sintaksë

per (<инициализация>; <условие>; <инкремент>) <оператор>

Kreu i një cikli të tillë përmban tre shprehje (në rastin më të thjeshtë). Nga emri i operatorit mund të kuptohet se shërben për organizimin e një cikli me sportel. Prandaj shprehja<инициализация>ekzekutohet një herë përpara përsëritjes së parë të ciklit. Pas çdo përsëritjeje të ciklit, shprehja ekzekutohet<инкремент>dhe më pas shprehja<условие>... Shprehja e fundit duhet të jetë logjike dhe përdoret për të vendosur kushtin për vazhdimin e ciklit. ato. për sa kohë që është e vërtetë, cikli do të vazhdojë të qarkullojë.

Për lehtësinë e kompozimit të operatorëve të lakut me një numërues, në këtë ndërtim janë futur shumë zgjerime.

  • <инициализация>mund të mos jetë një shprehje, por një përshkrim me inicializim të tipit "int i = 0".
  • <инициализация>mund të jetë një listë shprehjesh e ndarë me presje, të tilla si "i = 0, r = 1".
  • <инкремент>mund të jetë gjithashtu një listë shprehjesh, për shembull, "i ++, r * = 2"
  • Të gjithë komponentët (<инициализация>, <условие>dhe<инкремент>) janë opsionale. Për të shprehur<условие>kjo do të thotë që kushti konsiderohet gjithmonë i vërtetë (d.m.th. dalja nga cikli duhet të organizohet me disa mjete brenda vetë ciklit).

ato. le të themi ciklin e mëposhtëm (lak i pafund):

Për (;;) (...)

Për (int i = 0; i< 10; i++) x /=2;

Ky është zbatimi më "ekonomik" i lakut nga shembujt e mëparshëm.

Thyejeni dhe vazhdoni deklaratat

Nuk ka deklarata goto në Java. Siç e dini, goto çon në programe të pastrukturuara. Deklaratat e ndërprerjes dhe vazhdimit janë analoge të strukturuara të goto.

Ato mund të përdoren në sythe, dhe break mund të përdoret gjithashtu në një deklaratë switch. Ekzekutimi i deklaratës break bën që cikli të përfundojë menjëherë. Deklarata e vazhdimit shkakton fundin e përsëritjes aktuale të ciklit dhe fillimin e një të reje. Në këtë rast, kontrolli i gjendjes kryhet ende, kështu që vazhdimi mund të shkaktojë edhe fundin e lakut.

Për (int i = 0;; i ++) (nëse (vetëm tek && i% 2 == 0) vazhdon; y = (x + 1) / x; nëse (y - x< 0.001) break; x = y; }

Këtu oddOnly është një variabël boolean. Nëse është vendosur, atëherë të gjitha përsëritjet e ciklit me numra çift anashkalohen duke përdorur deklaratën vazhdim;

Kushti i përfundimit të ciklit në këtë shembull kontrollohet në mes të ciklit dhe nëse plotësohet, cikli përfundon duke përdorur deklaratën break.

Me unazat e mbivendosura, deklaratat e ndërprerjes dhe vazhdimit mund t'i referohen jo vetëm lakut në të cilin ndodhen, por edhe ciklit mbyllës. Për ta bërë këtë, deklarata e ciklit mbyllës duhet të shënohet me një etiketë, e cila duhet të specifikohet në deklaratën e ndërprerjes ose vazhdimit. Për shembull,

Lbl: ndërsa (...) (... Për (...) (... Nëse (...) thyej lbl;)...)

Këtu, deklarata e ndërprerjes do të bëjë që cikli for dhe cikli while të përfundojnë.

Deklarata e përzgjedhjes (ndërprerës)

Shërben për të organizuar një përzgjedhje sipas disa vlerave të një prej disa degëve të ekzekutimit.

Sintaksë

Ndërro (<выражение>) (rast<константа1>: <операторы1>rast<константа2>: <операторы2> . . . }

Shprehja duhet të kthejë një vlerë të plotë ose karakteri, dhe konstantat duhet të jenë të të njëjtit lloj si vlera e kësaj shprehjeje.

Elementet e rastit<константа>: "janë etiketa kërcimi, nëse vlera e shprehjes përkon me një konstante, atëherë do të bëhet një kërcim në këtë emërtim. Nëse vlera e shprehjes nuk përputhet me asnjë nga konstantet, atëherë gjithçka varet nga prania e fragmentit të paracaktuar. Nëse ajo është, atëherë kalimi ndodh në etiketën e paracaktuar nëse jo, atëherë i gjithë deklarata e switch-it anashkalohet.

  • Në një deklaratë switch, fragmentet e rastit nuk formojnë asnjë blloqe. Nëse pas deklaratës së fundit të kësaj lënde-fragmenti mbetet rasti tjetër, atëherë ekzekutimi do të vazhdojë, duke filluar nga deklarimi i parë i këtij rasti-fragmenti.
  • Për shkak të kësaj, një deklaratë break zakonisht përdoret në një deklaratë switch. Ai vendoset në fund të çdo fragmenti rasti.

Shembull (skedar SymbolTest.java)

Konsideroni një program demo që përdor deklaratat for dhe switch.

Ky program gjeneron rastësisht 100 karaktere të alfabetit latin dhe i klasifikon ato si "zanore", "bashkëtingëllore" dhe "ndonjëherë zanore". Kategoria e fundit përfshin simbolet "y" dhe "w".

Klasa publike SymbolTest (kryesor publik statik i zbrazët (args me vargje) (për (int i = 0; i< 100; i++) { char c = (char)(Math.random()*26 + "a"); System.out.print(c + ": "); switch (c) { case "a": case "e": case "i": case "o": case "u": System.out.println("гласная"); break; case "y": case "w": System.out.println("иногда гласная"); break; default: System.out.println("согласная"); } } } }

Në këtë shembull, ka disa elementë që janë të rinj për ne.

  • Përdoret metoda e rastësishme () e klasës Math. Le të shohim dokumentacionin për klasën e matematikës dhe të shohim se çfarë bën.
  • Në pohimin char c = (char) (Math.rastësor () * 26 + "a"); simbolit i shtohet vlera aritmetike. Me këtë shtesë në Java, simboli konvertohet në një numër që është i barabartë me kodin e këtij simboli.
  • Në deklaratën System.out.print (c + ":"); nuk përdoret println (...), por println (...). Metoda e printimit (...) ndryshon nga println (...) vetëm në atë që nuk e fut printimin në një rresht të ri, kështu që deklarata tjetër e printimit (...) ose println (...) do të vazhdojë. printim në të njëjtën linjë.

Ju gjithashtu duhet t'i kushtoni vëmendje fragmenteve të rastit. Formalisht ka 7 fragmente të tilla, por 5 prej tyre nuk përmbajnë asnjë operator. Pra, mund të supozojmë se ka 2 fragmente rasti, por secila prej tyre ka disa etiketa rasti.

Detyre shtepie

  • 1 Ndryshoni SymbolTest.java në mënyrë që numri i simboleve të gjeneruara të specifikohet nga parametri i thirrjes së programit.
  • 2 Shkruani një program që merr dy numra si parametra të thirrjes - gjatësinë e këmbëve të një trekëndëshi kënddrejtë, dhe si rezultat i printon këndet në gradë.


(asnje)

Përditësimi i fundit: 30.10.2018

Operacionet bitwise ose bitwise kryhen në bit ose pjesë të numrave individualë. Në këto operacione, vetëm numrat e plotë mund të përdoren si operandë.

Çdo numër ka një paraqitje binar të veçantë. Për shembull, numri 4 në binar është 100, dhe numri 5 është 101, e kështu me radhë.

Për shembull, merrni variablat e mëposhtëm:

Bajt b = 7; // 0000 0111 shkurt s = 7; // 0000 0000 0000 0111

Lloji i bajtit zë përkatësisht 1 bajt ose 8 bit, të përfaqësuar nga 8 bit. Prandaj, vlera binare e ndryshores b do të jetë 00000111. Lloji i shkurtër zë 2 byte ose 16 bit në memorie, kështu që numri i këtij lloji do të përfaqësohet me 16 bit. Dhe në këtë rast, ndryshorja s në sistemin binar do të ketë vlerën 0000 0000 0000 0111.

Për të shkruar numra të nënshkruar në Java, përdorni kod shtesë(komplementi i dy), në të cilin është nënshkruar biti më domethënës. Nëse vlera e tij është 0, atëherë numri është pozitiv dhe paraqitja e tij binar nuk ndryshon nga ajo e një numri të panënshkruar. Për shembull, 0000 0001 në dhjetor 1.

Nëse biti më domethënës është 1, atëherë kemi të bëjmë me një numër negativ. Për shembull, 1111 1111 në dhjetor përfaqëson -1. Prandaj, 1111 0011 përfaqëson -13.

Operacionet logjike

Veprimet logjike në numra paraqesin operacione bit. Në këtë rast, numrat konsiderohen në paraqitjen binar, për shembull, 2 në sistemin binar është e barabartë me 10 dhe ka dy shifra, numrin 7 - 111 dhe ka tre shifra.

    & (shumëzimi logjik)

    Shumëzimi kryhet pak nga pak, dhe nëse të dy operandët kanë vlera bit të barabarta me 1, atëherë operacioni kthen 1, përndryshe kthehet numri 0. Për shembull:

    Int a1 = 2; // 010 int b1 = 5; // 101 System.out.println (a1 & b1); // rezultati është 0 int a2 = 4; // 100 int b2 = 5; // 101 System.out.println (a2 & b2); // rezultati është 4

    Në rastin e parë, kemi dy numra 2 dhe 5. 2 në binar përfaqëson numrin 010, dhe 5 - 101. Shumëzimi në bit i numrave (0 * 1, 1 * 0, 0 * 1) jep rezultatin 000.

    Në rastin e dytë, në vend të dy, kemi numrin 4, i cili ka 1 në bitin e parë, ashtu si numri 5, kështu që këtu rezultati i veprimit (1 * 1, 0 * 0, 0 * 1) = 100 do të jetë numri 4 në formatin dhjetor ...

    | (shtesë logjike)

    Ky operacion kryhet edhe në shifra binare, por tani një njësi kthehet nëse të paktën një numër në këtë bit ka një njësi (operacioni "logjik OSE"). Për shembull:

    Int a1 = 2; // 010 int b1 = 5; // 101 System.out.println (a1 | b1); // rezultati 7 - 111 int a2 = 4; // 100 int b2 = 5; // 101 System.out.println (a2 | b2); // rezultati 5 - 101

    ^ (ekskluzive logjik OSE)

    Ky operacion quhet gjithashtu XOR, ai shpesh përdoret për kriptim të thjeshtë:

    Numri int = 45; // 1001 Vlera që do të enkriptohet - në formë binare 101101 int key = 102; // Çelësi i enkriptimit - në binar 1100110 int encrypt = çelësi numër ^; // Rezultati do të jetë numri 1001011 ose 75 System.out.println ("Numri i koduar:" + encrypt); int decrypt = enkriptoj çelësin ^; // Rezultati do të jetë numri origjinal 45 System.out.println ("Numri i deshifruar:" + dekriptoj);

    Këtu kryhen edhe operacione bitwise. Nëse kemi vlera të ndryshme të bitit aktual për të dy numrat, atëherë kthehet 1, përndryshe 0. Për shembull, rezultati i shprehjes 9 ^ 5 do të jetë numri 12. Dhe për të deshifruar numrin, aplikojmë veprim i kundërt me rezultatin.

    ~ (mohim logjik)

    Një veprim bit që përmbys të gjitha shifrat e një numri: nëse vlera e bitit është 1, atëherë ai bëhet zero dhe anasjelltas.

    Bajt a = 12; // 0000 1100 System.out.println (~ a); // 1111 0011 ose -13

Operacionet e ndërrimit

Veprimet e ndërrimit kryhen edhe në shifrat e numrave. Zhvendosja mund të ndodhë djathtas dhe majtas.

    a<

    a >> b - e zhvendos numrin a djathtas me shifra b. Për shembull, 16 >> 1 e zhvendos numrin 16 (që në sistemin binar është 10,000) një shifër në të djathtë, domethënë, rezultati është 1000 ose numri 8 në shënimin dhjetor.

    a >>> b - ndryshe nga llojet e mëparshme të ndërrimeve, ky operacion përfaqëson një zhvendosje të panënshkruar - zhvendos numrin a djathtas me shifra b. Për shembull, shprehja -8 >>> 2 do të jetë e barabartë me 1073741822.

Kështu, nëse numri fillestar që do të zhvendoset në njërën anë ose në tjetrën pjesëtohet me dy, atëherë në fakt fitohet shumëzimi ose pjesëtimi me dy. Prandaj, një operacion i tillë mund të përdoret në vend të shumëzimit ose pjesëtimit të drejtpërdrejtë me dy, pasi operacioni i ndërrimit në nivelin e harduerit është më pak i kushtueshëm se operacioni i ndarjes ose shumëzimit.

Shumica e operacioneve në llojet primitive kryhen jo duke përdorur metoda, por duke përdorur karaktere speciale të quajtura shenjë operimi.

Operacioni i caktimit

Caktimi i një ndryshoreje të vlerës së një konstante, një ndryshoreje tjetër ose një shprehjeje (variabla dhe/ose konstante të ndara nga shenjat e funksionimit) quhet operacioni i caktimit dhe tregohet me shenjën " = ", për shembull: x = 3; y = x; z = x; Në Java, lejohet të ripërdoret operacioni i caktimit në një shprehje, për shembull: x1 = x2 = x3 = 0; Ky operacion kryhet nga e djathta në majtas, pra variablit x3 fillimisht i caktohet vlera 0, më pas x2 i caktohet vlera x3 (0) dhe së fundi x1 i caktohet vlera x2 (0). Shenjat e operacionit që përdorin numrat si argumente bien në dy kategori: unare shenja (unare) për operacione me një argument dhe binare(binare) me dy argumente.

Operacione unare

Operacionet unare të mëposhtme përcaktohen në Java:
  • unary minus "-" - ndryshon shenjën e një numri ose shprehje në të kundërtën;
  • unary plus "+" - nuk kryen asnjë veprim në një numër ose shprehje;
  • Komplementi në bit "~" (vetëm për numrat e plotë) - përmbys të gjitha bitet e fushës së numrave (ndryshon 0 në 1 dhe 1 në 0);
  • rritja "++" (vetëm për numrat e plotë) - rrit vlerën e ndryshores me 1;
  • zvogëlimi "-" (vetëm për numrat e plotë) - zvogëlon vlerën e ndryshores me 1.
Shembuj të veprimeve unare "+" dhe "-": int i = 3, j, k; j = - i; // j = -3 k = + i; // k = 3 Një shembull i një veprimi të komplementit bit: int a = 15; int b; b = ~ a; // b = -16 Numrat a dhe b janë int, d.m.th. përfaqësohen nga brenda si numra të plotë binarë të nënshkruar 32-bit, kështu që paraqitja binar e numrave a dhe b do të duket kështu: a = 00000000 00000000 00000000 00001111 b = 11111111 1111111110 mund t'i shihni të gjitha këto në 11111111111 numri a janë ndryshuar ato në b, dhe ato në a janë ndryshuar në zero bit. Paraqitja dhjetore e b është –16. Shenjat e funksionimit të rritjes dhe zvogëlimit mund të vendosen ose para ose pas ndryshores. Këto opsione janë emëruar në përputhje me rrethanat parashtesë dhe postfiks duke regjistruar këto operacione. Shenja e operatorit në shënimin e prefiksit kthen vlerën e operandit të saj pas duke vlerësuar një shprehje. Për shënimin postfiks, shenja e funksionimit së pari kthen vlerën e operandit të tij dhe vetëm pas kësaj llogarit rritjen ose zvogëlimin, për shembull: int x = 1, y, z; y = ++ x; z = x ++; Variablës y do t'i caktohet vlera 2, sepse fillimisht vlera e x do të rritet me 1, dhe më pas rezultati do t'i caktohet ndryshores y. Variablës z do t'i caktohet vlera 1, sepse fillimisht ndryshores z do t'i caktohet një vlerë dhe më pas vlera e x do të rritet me 1. Në të dyja rastet, vlera e re e x do të jetë 2. Duhet të theksohet se në Java, ndryshe nga C, operacionet e zvogëlimit dhe rritjes mund të aplikohen edhe për variablat realë (të tipeve float dhe dyfishtë). Shenjat e funksionimit binar ndahen në operacione me rezultat numerik dhe operacione krahasimi, rezultati i të cilave është një vlerë boolean.

Operacionet aritmetike binare

Java përcakton sa vijon operacionet binare aritmetike:
  • shtimi "+";
  • zbritja "-";
  • shumëzimi " * ";
  • ndarja "/";
  • duke llogaritur pjesën e mbetur të pjesëtimit të numrave të plotë "%" (kthimin e mbetur të pjesëtimit të numrit të parë me të dytin, dhe rezultati do të ketë të njëjtën shenjë si dividenti), për shembull, rezultati i veprimit 5% 3 do të jetë 2, dhe rezultati i veprimit (-7) % (- 4) do të jetë -3. Në Java, operacioni mund të përdoret gjithashtu për ndryshore reale (të tilla si float ose double).
Shembuj të veprimeve aritmetike binare: int x = 7, x1, x2, x3, x4, x5; x1 = x + 10; // x1 = 17 x2 = x - 8; // x2 = -1 x3 = x2 * x; // x3 = -7 x4 = x / 4; // x4 = 1 (kur ndahen numrat e plotë // pjesa e pjesshme është hedhur poshtë) x5 = x% 4 // x5 = 3 (mbetja e pjesëtimit// 7 nga 4)

Operacionet bitwise

  • Operacionet në bit trajtojnë vlerat numerike origjinale si fusha bit dhe bëjnë si më poshtë për to:
  • vendosja e bitit në i-pozicioni i 1-të i fushës së rezultatit, nëse të dy bitet janë in i-Pozicionet e operandeve janë të barabarta me 1, ose me 0, përndryshe - në bit AND ("&");
  • vendosja e bitit në i-pozicioni i saj i fushës së rezultatit në 1, nëse të paktën një bit in i Pozicioni i -të i operandëve është i barabartë me 1, ose me 0, përndryshe - OR ("|");
  • vendosja e bitit në i-pozicioni i 1-të i fushës së rezultatit, nëse bitat janë në i-Pozicionet e operandëve nuk janë të barabarta me njëri-tjetrin, ose me 0, përndryshe - ekskluzive OR ("^");
  • Zhvendosja majtas e biteve të fushës së operandit të parë nga numri i biteve të përcaktuar nga operandi i dytë (biti i shenjës së numrit nuk ndryshon në këtë rast) - zhvendosja në të majtë në të majtë, duke marrë parasysh shenjën "<< ";
  • zhvendosja në të djathtë të biteve të fushës së operandit të parë nga numri i biteve të përcaktuar nga operandi i dytë (biti i shenjës së numrit nuk ndryshon në këtë rast) - zhvendosja në të djathtë në të djathtë, duke marrë parasysh " >>" shenjë;
  • zhvendosja në të djathtë të biteve të fushës së operandit të parë nga numri i biteve të përcaktuar nga operandi i dytë (biti i shenjës së numrit zhvendoset gjithashtu në këtë rast) - zhvendosja në të djathtë në të djathtë pa marrë parasysh " >>>" shenjë.
Shembuj të operacioneve në bit:
  1. Bitwise DHE

    int x = 112; int y = 94; int z; z = x & y; // z = 80: 00000000 00000000 00000000 01010000
  2. Në mënyrë bitale OSE

    int x = 112; // x: 00000000 00000000 00000000 01110000 int y = 94; // y: 00000000 00000000 00000000 01011110 int z; z = x | y; // z = 126: 00000000 00000000 00000000 01111110
  3. OSE ekskluzive bitwise

    int x = 112; // x: 00000000 00000000 00000000 01110000 int y = 94; // y: 00000000 00000000 00000000 01011110 int z; z = x ^ y; // z = 46: 00000000 00000000 00000000 00101110
  4. Zhvendosni majtas, duke marrë parasysh shenjën

    int x = 31, z; // x: 00000000 00000000 00000000 00011111 z = x<< 2 ; // z = 124: 00000000 00000000 00000000 01111100
  5. Zhvendosni djathtas, duke marrë parasysh shenjën

    int x = - 17, z; z = x >> 2; // z = -5: 11111111 11111111 11111111 11111011
  6. Zhvendosni djathtas pa marrë parasysh shenjën

    int x = - 17, z; // x: 11111111 11111111 11111111 11101111 z = x >>> 2; // z = 1073741819 // z: 00111111 11111111 11111111 11111011

Operacione të kombinuara

Në Java për veprime aritmetike binare mund të përdoren të kombinuara Shenjat e operacionit (të përbëra): operacioni identifikues = shprehje Kjo është ekuivalente me operacionin e mëposhtëm: identifikues = shprehje e veprimit identifikues Shembuj:
  1. Shprehja x + = b do të thotë x = x + b.
  2. Shprehja x - = b do të thotë x = x - b.
  3. Shprehja x * = b do të thotë x = x * b.
  4. Shprehja x / = b do të thotë x = x / b.
  5. Shprehja x% = b do të thotë x = x% b.
  6. Shprehja x & = b do të thotë x = x & b.
  7. Shprehja x | = b do të thotë x = x | b.
  8. Shprehja x ^ = b do të thotë x = x ^ b.
  9. Shprehja x<<= b означает x = x << b .
  10. Shprehja x >> = b do të thotë x = x >> b.
  11. Shprehja x >>> = b do të thotë x = x >>> b.

Operacionet e krahasimit

Java përcakton operatorët e mëposhtëm krahasimi:
  • "==" (e barabartë), "! =" (jo e barabartë),
  • ">" (më e madhe se), "> =" (më e madhe ose e barabartë),
  • " < " (меньше) " <= " (меньше или равно)
kanë dy operandë dhe kthejnë një vlerë boolean që korrespondon me rezultatin e krahasimit ( i rremë ose e vërtetë). Vini re se kur krahasoni dy vlera për barazinë në Java, si në C dhe C ++, simbolet " == "(dy shenja të barabarta pa hapësirë), në ndryshim nga operatori i caktimit, i cili përdor "" = ". Përdorimi i simbolit" = "kur krahason dy vlera ose shkakton një gabim përpilimi ose prodhon një rezultat të pasaktë. Shembuj të operacioneve të krahasimit: boolean është e barabartë, nuk është e barabartë, është më e madhe, është më e madheOrE barabartë, është më e vogël, është më pakOrE barabartë; int x1 = 5, x2 = 5, x3 = 3, x4 = 7; është e barabartë = x1 == x2; // është e barabartë = e vërtetë nuk është e barabartë = x1 = x2; // nuk është e barabartë = false është më e madhe = x1> x3; // është më i madh = i vërtetë // është më i madh ose i barabartë = i vërtetë është më i madh ose i barabartë = x2> = x3; është më pak = x3< x1; // isLess = true isLessOrEqual = x1 <= x3; // isLessOrEqual = false

Operacionet Boolean

Operacionet Boolean ekzekutohen në variablat boolean dhe rezultati i tyre është gjithashtu një vlerë e tipit logjike... Operacionet boolean të mëposhtme përcaktohen në Java:
  • mohim "!" - zëvendësimi i falsifikuar me të vërtetën, ose anasjelltas;
  • DHE operacioni "&" - rezultati është i vërtetë vetëm nëse të dy operandët janë të vërtetë, përndryshe rezultati është i rremë;
  • OSE operacion "|" - rezultati është i vërtetë vetëm nëse të paktën një nga operandët është i vërtetë, përndryshe rezultati është i rremë.
  • Operacioni XOR "^" - rezultati është i vërtetë vetëm nëse operandët nuk janë të barabartë me njëri-tjetrin, përndryshe rezultati është i rremë.
Operatorët "&", "|" dhe "^" mund të përdoren, si dhe operatorët përkatës në bit, në operatorët e caktimit të përbërë: "& =", "| =" dhe "^ =" Përveç kësaj, operacionet " = janë të zbatueshme për operandët Boolean. = "(e barabartë) dhe"! = "(jo e barabartë). Siç mund ta shihni nga përkufizimi i OR dhe AND, operacioni OR vlerësohet në true kur operandi i parë është i vërtetë, pavarësisht nga vlera e operandit të dytë, dhe operatori AND vlerëson false kur operandi i parë është false, pavarësisht vlera e operandit të dytë. Java përcakton dy operacione të tjera boolean: versionet e dyta të AND dhe OR, të njohura si operacione logjike të qarkut të shkurtër: AND i shkurtuar "&&" dhe OR i shkurtuar "||". Duke përdorur këto operacione, operandi i dytë nuk do të vlerësohet fare, gjë që është e dobishme në rastet kur funksionimi i saktë i operandit të djathtë varet nga fakti nëse operandi i majtë është i vërtetë apo i gabuar. Shembuj të operacioneve boolean: boolean isInRange, isValid, isNotValid, isEqual, isNotEqual; int x = 8; isInRange = x> 0 && x< 5 ; // isInRange = false isValid = x >0 || x> 5; // isValid = e vërtetë ështëNotValid =! eshte e vlefshme; // isNotValid = false është e barabartë = ështëInRange == është Valid; // isEqual = false // isNotEqual = e vërtetë ështëNotEqual = ështëInRange! = është e vlefshme

Operacioni i kushtëzuar

Një veprim i kushtëzuar shkruhet në formën shprehje-1?Shprehje-2: shprehje-3. Në këtë rast, shprehja-1 vlerësohet fillimisht, e cila duhet të japë një vlerë boolean, dhe më pas, nëse shprehja-1 është e vërtetë, shprehja-2 vlerësohet dhe kthehet si rezultat i operacionit, ose (nëse shprehja-1 është false ), dhe shprehja-3 kthehet si rezultat i operacionit. Një shembull i një operacioni të kushtëzuar: x = n> 1? 0: 1; Variablës x do t'i caktohet vlera 0 nëse n> 1 (shprehja n> 1 vlerësohet me e vërtetë) ose 1 nëse n≤1 (shprehja n> 1 vlerësohet në false).

Vjetërsia e operacioneve

Veprimet në shprehje kryhen nga e majta në të djathtë, megjithatë, sipas përparësisë së tyre. Pra, veprimet e shumëzimit në shprehjen y = x + z * 5; do të ekzekutohet para veprimit të mbledhjes sepse përparësia e veprimit të shumëzimit është më e lartë se përparësia e veprimit të mbledhjes. Prioritetet e funksionimit (sipas uljes së prioritetit) në Java janë paraqitur në tabelë. një.
Kllapat rrisin përparësinë e operacioneve që janë brenda tyre. Pra, nëse futni kllapa në shprehjen e mësipërme: y = (x + z) * 5; atëherë fillimisht do të kryhet veprimi i mbledhjes dhe më pas operacioni i shumëzimit. Ndonjëherë kllapat përdoren thjesht për ta bërë shprehjen më të lexueshme, për shembull: (x> 1) && (x<= 5 ) ;

Konvertimi i llojit dhe derdhja gjatë kryerjes së operacioneve

Në caktimet dhe shprehjet aritmetike mund të përdoren fjalë për fjalë, variabla dhe shprehje të llojeve të ndryshme, p.sh.: double y; bajt x; y = x + 5; Ky shembull shton ndryshoren e bajtit x në 5 (int), dhe ia cakton rezultatin ndryshores së dyfishtë y. Në Java, si në gjuhën C, konvertimet e tipit në vlerësimin e shprehjeve mund të kryhen automatikisht, ose duke përdorur një operator cast. Megjithatë, rregullat e hedhjes janë disi të ndryshme nga ato të gjuhës C dhe në përgjithësi janë më strikte se në gjuhën C. Kur kryeni një operacion caktimi, konvertimi i tipit ndodh automatikisht nëse transformimi i zgjeruar(konvertimi i zgjerimit) dhe të dy llojet janë të pajtueshme... Transformimet zgjeruese janë transformime bajt® shkurt® ndër® gjatë® noton® dyfishtë... Për zgjerimin e konvertimeve, llojet numerike, duke përfshirë numrin e plotë dhe pikën lundruese, janë të pajtueshme me njëri-tjetrin. Megjithatë, llojet numerike nuk janë të pajtueshme me llojet char dhe boolean. Llojet char dhe boolean nuk janë as në përputhje me njëri-tjetrin. Java gjithashtu kryen konvertimin automatik të tipit kur ruan një konstante të numrit të plotë literal (e cila është e tipit int si parazgjedhje) në variabla të tipit bajt, të shkurtër ose të gjatë (megjithatë, nëse literali ka një vlerë jashtë gamës së vlerave të vlefshme për këtë lloji, shfaqet një mesazh gabimi: humbje e mundshme e saktësisë). Nëse konvertimi është një konvertim ngushtues, d.m.th., po kryhet byte ¬ i shkurtër ¬ char ¬ int ¬ i gjatë ¬ ¬ ¬ dyfish, atëherë një konvertim i tillë mund të rezultojë në humbje të saktësisë ose shtrembërim të numrit. Prandaj, me ngushtimin e konvertimeve, kur programi kompilohet, shfaqet një mesazh diagnostikues për papajtueshmërinë e tipit dhe skedarët e klasës nuk krijohen. Ky mesazh do të shfaqet gjithashtu kur përpiqeni të konvertoni shprehjet e tipit byte ose short në një variabël të tipit char. Nëse megjithatë është e nevojshme të kryhen konvertime të tilla, përdoret një operacion cast, i cili ka formatin e mëposhtëm: ( lloji i konvertimit) kuptimi, ku lloji i konvertimit përcakton llojin në të cilin duhet të konvertohet e dhëna kuptimi, për shembull, si rezultat i ekzekutimit të operatorëve: bajt x = 71; simboli char = (char) x; ndryshorja e simbolit do të vendoset në "G". Nëse një vlerë me pikë lundruese i caktohet një lloji të plotë, atëherë (nëse vlera e pikës lundruese ka një pjesë të pjesshme), ndodh gjithashtu një konvertim i qartë i tipit cungim(prerje) numrat. Pra, si rezultat i ekzekutimit të operatorit int x = (int) 77.85; ndryshorja x do të vendoset në 77. Nëse vlera e caktuar është jashtë kufijve konvertimet e tipit , atëherë rezultati i konvertimit do të jetë pjesa e mbetur e pjesëtimit të vlerës me modulin e diapazonit të llojit të caktuar (për numrat e tipit bajt, moduli i diapazonit do të jetë 256, shkurt - 65536, për int - 4294967296 , dhe për një kohë të gjatë - 18446744073709551616). Për shembull, si rezultat i deklaratës byte x = (byte) 514; ndryshorja x do të vendoset në 2. Kur konvertoni numra të plotë ose numra realë në të dhëna të tipit char, shndërrimi në një karakter ndodh nëse numri origjinal është në intervalin nga 0 në 127, përndryshe karakteri merr vlerën "?". Kur kryeni konvertime aritmetike dhe bit, të gjitha vlerat e bajtit dhe të shkurtër, si dhe char, zgjerohen në int, (ndërsa vlera numerike e kodit të karakterit përdoret në llogaritjet për char) atëherë, nëse të paktën një operand është i llojit të gjatë , lloji i shprehjes së numrit të plotë zgjerohet në të gjatë. Nëse njëri prej operandëve është i tipit float, atëherë lloji i shprehjes së plotë zgjerohet në float, dhe nëse njëri prej operandëve është i tipit double, atëherë lloji i rezultatit do të jetë i dyfishtë. Pra, nëse variablat deklarohen bajt a, c; i shkurtër b; pastaj në shprehjen a + b * c - 15 L + 1,5F + 1,08 - 10; së pari, përpara se të llogaritet a + b * c, vlerat e variablave do të zgjerohen në int, më pas, meqenëse konstantja 15 është e llojit të gjatë, rezultati i llogaritjes do të rritet në shumë kohë përpara zbritjes. Pas kësaj, duke qenë se literali 1.5 është i tipit float, rezultati i llogaritjes së a + b * c - 15L do të zgjerohet në float përpara se të shtohet në këtë literal. Përpara se të kryeni mbledhjen me numrin 1.08, rezultati i llogaritjeve të mëparshme do të zgjerohet në dyfish (pasi konstantat reale janë të tipit double si parazgjedhje) dhe, së fundi, përpara se të kryeni mbledhjen e fundit, do të jetë literal 10 (sipas parazgjedhjes int) zgjeruar në dyfish. Kështu, rezultati i vlerësimit të shprehjes do të jetë i tipit double. Shtesat automatike të tipit (veçanërisht shtesat e shkurtra dhe bajt në int) mund të shkaktojnë gabime të njohura keq në kohën e përpilimit. Për shembull, në operatorët: bajt x = 30, y = 5; x = x + y; përpara se të kryhet mbledhja, vlera e variablave x dhe y do të zgjerohet në int dhe më pas do të shfaqet një mesazh gabimi kur tentohet të caktohet rezultati i një llogaritjeje të tipit int në një variabël të tipit byte. Për të shmangur këtë është e nevojshme të përdoret një konvertim i qartë i tipit në operatorin e dytë: x = (byte) (x + y); Ju duhet të vendosni shprehjen x + y në kllapa sepse përparësia e castit të mbyllur në kllapa është më e lartë se përparësia e veprimit të mbledhjes. Meqë ra fjala, nëse e shkruani operatorin e dytë si: x + = y; nuk do të ketë mesazh gabimi. Lidhja me të parën

Përditësimi i fundit: 30.10.2018

Shumica e operacioneve në Java janë të ngjashme me ato të përdorura në gjuhë të tjera të ngjashme me C-në. Ekzistojnë operacione unare (të kryera në një operand), operacione binare në dy operandë dhe operacione treshe në tre operandë. Një operand është një ndryshore ose vlerë (për shembull, një numër) i përfshirë në një operacion. Le të shqyrtojmë të gjitha llojet e operacioneve.

Ata marrin pjesë në veprimet aritmetike me numra. Java ka operacione aritmetike binare (të kryera në dy operandë) dhe unare (të kryera në një operand). Operacionet binare përfshijnë si më poshtë:

    Operacioni i mbledhjes së dy numrave:

    Int a = 10; int b = 7; int c = a + b; // 17 int d = 4 + b; // njëmbëdhjetë

    veprim i zbritjes së dy numrave:

    Int a = 10; int b = 7; int c = a - b; // 3 int d = 4 - a; // -6

    veprimi i shumëzimit të dy numrave

    Int a = 10; int b = 7; int c = a * b; // 70 int d = b * 5; // 35

    Veprimi i ndarjes së dy numrave:

    Int a = 20; int b = 5; int c = a / b; // 4 dyfishtë d = 22,5 / 4,5; // 5.0

    Vlen të merret në konsideratë kur ndahet, pasi nëse dy numra të plotë përfshihen në operacion, rezultati i ndarjes do të rrumbullakoset në një numër të plotë, edhe nëse rezultati i caktohet një ndryshoreje float ose të dyfishtë:

    K dyfishtë = 10/4; // 2 System.out.println (k);

    Që rezultati të jetë një numër me pikë lundruese, një nga operandët duhet gjithashtu të përfaqësojë një numër me pikë lundruese:

    K dyfishtë = 10.0 / 4; // 2.5 System.out.println (k);

    Marrja e mbetjes nga pjesëtimi i dy numrave:

    Int a = 33; int b = 5; int c = a% b; // 3 int d = 22% 4; // 2 (22 - 4 * 5 = 2)

Ekzistojnë gjithashtu dy veprime aritmetike unare që kryhen në të njëjtin numër: ++ (rritje) dhe - (zvogëlim). Secili prej operacioneve ka dy lloje: prefiks dhe postfiks:

    ++ (rritja e prefiksit)

    Supozon rritjen e ndryshores me një, për shembull, z = ++ y (së pari, vlera e ndryshores y rritet me 1, dhe më pas vlera e saj i caktohet ndryshores z)

    Int a = 8; int b = ++ a; System.out.println (a); // 9 System.out.println (b); // 9

    ++ (rritje pas fiksimit)

    Gjithashtu përfaqëson një rritje në një ndryshore me një, për shembull, z = y ++ (së pari, vlera e y i caktohet z, dhe më pas vlera e y rritet me 1)

    Int a = 8; int b = a ++; System.out.println (a); // 9 System.out.println (b); // tetë

    - (zvogëlimi i prefiksit)

    duke ulur variablin me një, për shembull, z = - y (së pari, vlera e ndryshores y zvogëlohet me 1, dhe më pas vlera e saj i caktohet ndryshores z)

    Int a = 8; int b = --a; System.out.println (a); // 7 System.out.println (b); // 7

    - (zvogëlim i postfiksit)

    z = y-- (së pari, vlera e ndryshores y i caktohet ndryshores z, dhe më pas vlera e ndryshores y zvogëlohet me 1)

    Int a = 8; int b = a--; System.out.println (a); // 7 System.out.println (b); // tetë

Prioriteti aritmetik

Disa operacione kanë përparësi ndaj të tjerave dhe për këtë arsye kryhen së pari. Operacionet sipas rendit në ulje të prioritetit:

++ (rritje), - (zvogëlim)

* (shumëzimi), / (pjestimi),% (mbetja e pjesëtimit)

+ (mbledhje), - (zbritje)

Prioriteti i veprimeve duhet të merret parasysh kur ekzekutoni një grup shprehjesh aritmetike:

Int a = 8; int b = 7; int c = a + 5 * ++ b; System.out.println (c); // 48

Së pari, do të kryhet operacioni i rritjes ++ b, i cili ka një prioritet më të madh - do të rrisë vlerën e ndryshores b dhe do ta kthejë atë si rezultat. Pastaj kryhet shumëzimi 5 * ++ b, dhe vetëm mbledhja e fundit është a + 5 * ++ b

Kllapat ju lejojnë të ripërcaktoni rendin e llogaritjeve:

Int a = 8; int b = 7; int c = (a + 5) * ++ b; System.out.println (c); // 104

Pavarësisht se veprimi i mbledhjes ka prioritet më të ulët, së pari do të kryhet mbledhja dhe jo shumëzimi, pasi veprimi i mbledhjes është i mbyllur në kllapa.

Asociativiteti i operacioneve

Përveç përparësisë, operacionet dallohen nga një koncept i tillë si asociativiteti... Kur operacionet kanë të njëjtën përparësi, radha e vlerësimit përcaktohet nga shoqëria e operatorëve. Ekzistojnë dy lloje të operatorëve në varësi të asociativitetit:

    Operatorët shoqërues të majtë që ekzekutojnë nga e majta në të djathtë

    Operatorët shoqërues të djathtë që ekzekutojnë nga e djathta në të majtë

Për shembull, disa veprime, të tilla si shumëzimi dhe pjesëtimi, kanë të njëjtin prioritet. Cili do të jetë atëherë rezultati në shprehjen:

Int x = 10/5 * 2;

A duhet ta interpretojmë këtë shprehje si (10/5) * 2 apo si 10 / (5 * 2)? Në të vërtetë, në varësi të interpretimit, do të marrim rezultate të ndryshme.

Meqenëse të gjithë operatorët aritmetikë (përveç shtimit dhe zvogëlimit të parashtesave) lihen asociativë, domethënë ekzekutohen nga e majta në të djathtë. Prandaj, shprehja 10/5 * 2 duhet të interpretohet si (10/5) * 2, domethënë, rezultati do të jetë 4.

Operacionet me pikë lundruese

Duhet të theksohet se numrat me pikë lundruese nuk janë të përshtatshëm për llogaritjet financiare dhe të tjera ku gabimet e rrumbullakimit mund të jenë kritike. Për shembull:

Dyfishtë d = 2,0 - 1,1; System.out.println (d);

Në këtë rast, ndryshorja d nuk do të jetë e barabartë me 0.9, siç mund të supozohet fillimisht, por 0.8999999999999999. Gabimet e saktësisë si ky ndodhin sepse sistemi binar përdoret në një nivel të ulët për të përfaqësuar numrat me pikë lundruese, por nuk ka paraqitje binar për 0.1, si dhe për vlera të tjera thyesore. Prandaj, nëse në raste të tilla, zakonisht përdoret klasa BigDecimal, e cila ju lejon të anashkaloni situata të tilla.

Artikujt kryesorë të lidhur