Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Windows 8
  • Ostatak cjelobrojnog dijeljenja java. Aritmetičke operacije

Ostatak cjelobrojnog dijeljenja java. Aritmetičke operacije

Pogledajmo jedan od pristupa unosu podataka iz standardnog toka kroz klasu java.util.Skener. Učinimo to na primjeru jednostavnog zadatka s vrlo korisne stranice e-olimp.com

Zadatak

Unesite jedan broj iz standardnog toka. Pod pretpostavkom da je ovo pozitivan dvoznamenkasti cijeli broj, ispišite svaku njegovu znamenku zasebno (odvojenu razmakom) na standardni izlaz. Redoslijed brojeva ne treba mijenjati.

Testovi

Algoritam ne pretpostavlja nikakve specifične slučajeve. Radimo tri testa - najmanji broj u prihvatljivom rasponu, najveći i neka vrijednost u sredini raspona.

Ulaz Izlaz
10 1 0
99 9 9
54 5 4

Riješenje

Iskoristimo razred java.util.Skener, za unos podataka u obliku cijelog broja. I izračunajmo oba njegova broja.

Ispisivanje znamenki dvoznamenkastog cijelog broja

Java

klasa Main( public static void main (String args) baca java.lang.Exception ( java.util.Scanner i = new java.util.Scanner(System.in); int n = i.nextInt(); System.out. println(n / 10 + " " + n % 10); ) )

glavni razred (

public static void main(String args) baca java. jezik iznimka(

Java. util. Skener i = nova java. util. Skener(System.in);

int n = i . nextInt();

Sustav. van . println (n/10 + "" + n % 10);

Objašnjenja

  1. Opisivanje varijable ja tip java.util.Skener i odmah mu dodijeliti vrijednost novog objekta ove klase. Konstruktor izrađuje objekt Skener'a iz standardnog ulaza. Oni. ja postaje nadgradnja nad standardni tok ulazni. To nam omogućuje čitanje cijelog broja umjesto samo čitanja metode čitati() jedan po jedan bajt.
  2. Koristeći se metodom nextInt() pročitati niz brojeva i pretvoriti ga u cijeli broj. Broj spremamo u varijablu n.
  3. n/ 10 je broj desetica u broju. Desetice će biti deset puta manje od samog broja. Vrši se cjelobrojno dijeljenje – cijelo dijeljenje.
  4. n% 10 - izračunati ostatak dijeljenja s deset - broj jedinica - najviše desna znamenka brojevima.
  5. n/ 10 + » » + n% 10 - umetnite jedan razmak između dva cijela broja. U ovom slučaju, brojevi se također pretvaraju u prikaz niza i sva tri niza se spajaju - što se naziva ulančavanje niza. Ovo je način na koji operacija “+” radi s podacima niza.

Ubrzavanje I/O

Unatoč svim pogodnostima ovog pristupa, prilično je spor i ponekad se zadaci ne završe na vrijeme. Svoj rad možete znatno ubrzati korištenjem StreamTokenizer i PrintWriter.
To će povećati količinu koda, ali će uštedjeti vrijeme.

I/O ubrzanje

Java

import java.io.*; import java.util.*; class Main ( static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in))); static PrintWriter out = new PrintWriter(System.out); static int nextInt() baca IOException ( in.nextToken(); return (int)in.nval; ) public static void main(String args) izbacuje java.lang.Exception ( int n = nextInt(); out.println(n / 10 + " " + n % 10); out.flush( );)))

uvoz jave. io. * ;

uvoz jave. util. * ;

glavni razred (

statički StreamTokenizer u = novi StreamTokenizer(novi BufferedReader(novi InputStreamReader(System. u)));

static PrintWriter out = novi PrintWriter (System . out ) ;

static int nextInt() izbacuje IOException (


Studirajte za "Razvojnika igara" + zaposlenje

Operatori u Javi

Predstaviti operacije zbrajanja, oduzimanja, množenja i dijeljenja jezik Java koriste se obični aritmetički operatori + - * /.

Operator / označava cjelobrojno dijeljenje ako su mu oba argumenta cijeli brojevi. Inače, ovaj operator označava dijeljenje brojeva s pomičnim zarezom. Ostatak cjelobrojnog dijeljenja (tj. mod funkcija) označava se simbolom %.
Na primjer, 15/2 je jednako 7, 15%2 je jednako 1, a 15 je . 0/2 jednako je 7. 5.

Imajte na umu da cjelobrojno dijeljenje s 0 uzbuđuje iznimna situacija, dok je rezultat dijeljenja s 0 broja s pomičnim zarezom beskonačnost ili NaN.

Aritmetički operatori se mogu koristiti za inicijalizaciju varijabli.

int n = 5;
int a = 2 *n; // Vrijednost varijable a je 10.

Pogodno je koristiti skraćene binarne aritmetičke operatore u operatorima dodjele.

Na primjer, operater
x + = 4;
je ekvivalentan operatoru
x = x + 4;

(Kratki operatori dodjele formiraju se propisivanjem simbola aritmetičkog operatora, poput * ili %, prije simbola =, poput *= ili %=.)

Jedan od navedenih ciljeva Java jezika je neovisnost o stroju.

Izračuni bi trebali dovesti do isti rezultat, neovisno o tome koji ih virtualni stroj pokreće. Za aritmetički proračuni nad brojevima s pomičnim zarezom ovo se odjednom pokazalo teškim zadatkom. Tip dvostruko koristi 64 bita za pohranu numeričkih vrijednosti, ali neki procesori koriste 80-bitne registre s pomičnim zarezom. Ovi registri daju dodatnu preciznost tijekom srednjih faza izračuna. Razmotrite sljedeći izraz kao primjer:

dvostruko w = x * y / z;

Mnogi procesori Intel izračunajte izraz x * y i taj međurezultat pohranite u 80-bitni registar, zatim ga podijelite s vrijednošću varijable z i na samom kraju odgovor zaokružite na 64 bita. Na taj način možete povećati točnost izračuna izbjegavajući prelijevanje. Međutim, ovaj rezultat može biti drugačiji ako se svi izračuni izvode na 64-bitnom procesoru.

Iz tog razloga, u izvornom opisu virtual Java strojevi navedeno je da sve međuizračune treba zaokružiti. Ovo je razbjesnilo računalnu zajednicu. Nisu samo zaokruženi izračuni ono što može uzrokovati prelijevanje. Oni su zapravo sporiji od preciznijih izračuna jer operacije zaokruživanja zahtijevaju Određeno vrijeme. Kao rezultat toga, programeri Java jezika promijenili su svoje mišljenje, nastojeći riješiti sukob između optimalne izvedbe i izvrsne ponovljivosti.

Zadani programeri virtualni stroj sada dopušta proširenu preciznost koja se koristi u međuizračunima. Međutim, metode označene ključnom riječi strictfp moraju koristiti precizne operacije s pomičnim zarezom kako bi osigurale ponovljive rezultate. Na primjer, glavna metoda može se označiti ključnim riječima kao što je prikazano u nastavku:
public static strictfp void main(String args)

U ovom slučaju, sve naredbe unutar glavne metode izvodit će točne operacije na brojevima s pomičnim zarezom.

Pojedinosti ovih operacija usko su povezane s radnim značajkama Intelovih procesora. Prema zadanim postavkama, međurezultati mogu koristiti prošireni eksponent, ali ne i proširenu mantisu. (Intelovi čipovi podržavaju zaokruživanje mantise bez žrtvovanja performansi.) Stoga je jedina razlika između zadanih i točnih izračuna to što točni izračuni mogu uzrokovati prekoračenje, dok zadani izračuni to ne čine.

Ako vam oči cakle dok čitate ovaj komentar, ne brinite. Za većinu programera ovo je pitanje potpuno nevažno. Preljev se u većini slučajeva ne pojavljuje u izračunima s pomičnim zarezom. U ovoj knjizi nećemo koristiti ključna riječ strogifp.

Operatori inkrementacije i dekrementacije

Programeri, naravno, znaju da je jedna od najčešćih operacija s numeričkim varijablama zbrajanje ili oduzimanje jedinice. U jeziku Java, kao i u jezicima C i C++, postoje operatori inkrementacije i dekrementacije: operator x++ dodaje jedan trenutnoj vrijednosti varijable x, a operator x oduzima jedan od nje.

Na primjer, kod
int n = 12;
n++;
čini vrijednost varijable n jednakom 13.

Budući da ovi operatori mijenjaju vrijednost varijable, ne mogu se primijeniti na same brojeve. Na primjer, operator 4++ nije valjan.

Postoje dvije vrste ovih operatora. Gore je prikazan "postfix" oblik operatora, u kojem se simboli operacije nalaze iza operanda. Postoji i "prefiks" oblik - ++n.
Oba ova operatora povećavaju vrijednost varijable za jedan. Razlika između njih pojavljuje se samo kada se ti operatori koriste unutar izraza. Prefiksni oblik operatora inkrementa prvo dodaje jedan vrijednosti varijable, dok postfiksni oblik koristi staru vrijednost te varijable.

int m = 7;
int n = 7;
int a = 2 * ++m; // Sada je vrijednost a 16, a m je 8.
int b = 2 * n++; // Sada je vrijednost b 14, a n 8.

(Budući da je C++ dobio ime po operatoru ++, to je bio povod za prvu šalu na njegov račun. Kritnici ističu da čak i naziv ovog jezika sadrži grešku: “Osim toga, ovaj jezik bi se trebao zvati ++C , jer želimo koristiti ovaj jezik tek nakon što se poboljša.")

Većina operacija na primitivni tipovi izvodi se ne korištenjem metoda, već korištenjem posebni znakovi, nazvao znak operacije.

Operator dodjele

Zadatak varijabla vrijednosti poziva se konstanta, druga varijabla ili izraz (varijable i/ili konstante odvojene znakovima operatora). operacija dodjele i označen je znakom " = ", na primjer: x = 3 ; y = x; z = x; U Javi je moguće koristiti operator dodjele više puta u jednom izrazu, na primjer: x1 = x2 = x3 = 0 ; Ova operacija se izvodi iz zdesna nalijevo, tj. varijabli x3 prvo se dodjeljuje vrijednost 0, zatim se varijabli x2 dodjeljuje vrijednost varijable x3 (0), a na kraju varijabli x1 dodjeljuje se vrijednost varijable x2 (0). operacije čiji su argumenti brojevi podijeljene su u dvije kategorije: unarni(unarni) predznaci operacija s jednim argumentom i binarni(binarni) s dva argumenta.

Unarne operacije

U Javi su definirani sljedeći unarni operatori:
  • unarni minus " - " – mijenja predznak broja ili izraza u suprotan;
  • unarni plus " + " – ne izvodi nikakve radnje na broju ili izrazu;
  • bitni komplement "~" (samo za cijele brojeve) – invertira sve bitove brojčanog polja (mijenja 0 u 1 i 1 u 0);
  • inkrement "++" (samo za cijele brojeve) – povećava vrijednost varijable za 1;
  • dekrement " -- " (samo za cijele brojeve) – smanjuje vrijednost varijable za 1.
Primjeri unarne operacije" + " i " - ": int i = 3, j, k; j= - i; // j = -3 k = + i; // k = 3 Primjer operacije bitnog komplementa: int a = 15 ; int b; b = ~a; // b = -16 Brojevi a i b su brojevi tipa int , tj. računalo interno predstavlja kao 32-bitne predznake, dakle binarni prikaz Brojevi A i B izgledat će ovako: a = 00000000 00000000 00000000 00001111 b = 11111111 11111111111111111110000 Kao što možete vidjeti iz ovog prikaza, svi nula bita u broju A mijenjaju se u one bitove u broju B, a oni bits in a mijenjaju se u nula bitova. Decimalni prikaz b je –16. Znakovi operacije povećanja i smanjenja mogu se postaviti ispred ili iza varijable. Ove su opcije tako imenovane prefiks I postfiks bilježenje ovih transakcija. Znak operatora u notaciji prefiksa vraća vrijednost svog operanda nakon procjena izraza. U postfiksnoj notaciji, znak operacije isprva vraća vrijednost svog operanda i tek nakon toga izračunava inkrement ili dekrement, na primjer: int x = 1, y, z; y = ++x; z= x++ ; Varijabli y bit će dodijeljena vrijednost 2 jer će vrijednost x prvo biti povećana za 1, a zatim će rezultat biti dodijeljen varijabli y. Varijabli z bit će dodijeljena vrijednost 1 jer će se prvo varijabli z dodijeliti vrijednost, a zatim će se vrijednost x povećati za 1. U oba slučaja, nova vrijednost x će biti 2. Treba napomenuti da se u Javi, za razliku od jezika C, operacije dekrementiranja i inkrementiranja također mogu primijeniti na stvarne varijable ( tip plovka i dvostruko). Znakovi binarnih operacija dijele se na operacije s numeričkim rezultatom i operacije usporedbe čiji je rezultat Booleova vrijednost.

Aritmetičke binarne operacije

Java definira sljedeće aritmetičke binarne operacije:
  • dodatak "+";
  • oduzimanje " - ";
  • množenje " * ";
  • podjela "/";
  • izračunavanje ostatka dijeljenja cijelih brojeva "%" (vraća ostatak dijeljenja prvog broja s drugim, a rezultat će imati isti predznak kao i dividenda), na primjer, rezultat operacije 5%3 bit će jednak 2, a rezultat operacije (-7) %(-4) bit će jednak -3. U Java operacija također se može koristiti za realne varijable (float ili double tip).
Binarni primjeri aritmetičke operacije: 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 (pri dijeljenju cijelih brojeva // frakcija odbačeno) x5 = x% 4 // x5 = 3 (ostatak dijeljenja// 7 sa 4)

Bitove operacije

  • Bitne operacije uzimaju u obzir izvornik numeričke vrijednosti kao polja bitova i izvršite sljedeće akcije na njima:
  • postavljanje malo u ja Pozicija polja rezultata je 1 ako su oba bita unutra ja Pozicije operanda su jednake 1, ili 0 inače – bit-wise AND ("& ");
  • postavljanje malo u ja Pozicija polja rezultata je 1 ako postoji najmanje jedan bit ja th pozicija operanda je jednaka 1, ili 0 inače – bit-wise OR (" | ");
  • postavljanje malo u ja Pozicija polja rezultata je 1 ako su bitovi unutra ja-th položaji operanda nisu međusobno jednaki ili na 0 u suprotnom – pobitno isključivi ILI (" ^ ");
  • pomak ulijevo od bitova polja prvog operanda za broj bitova određenih drugim operandom (bit predznaka broja se ne mijenja) - bitni pomak ulijevo uzimajući u obzir znak "<< ";
  • desni pomak bitova prvog polja operanda za broj bitova koji određuje drugi operand (bit predznaka broja se ne mijenja) – bitni pomak udesno, uzimajući u obzir znak " >> ";
  • pomak udesno od bitova polja prvog operanda za broj bitova određenih drugim operandom (bit predznaka broja također je pomaknut) - bitni pomak udesno bez uzimanja u obzir " >>> " znak.
Primjeri bitovnih operacija:
  1. Bitno I

    int x = 112; int y = 94; int z; z = x & y; // z=80: 00000000 00000000 00000000 01010000
  2. Bitno OR

    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. Bitno isključivi OR

    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. Pomak ulijevo na temelju znaka

    int x = 31, z; // x: 00000000 00000000 00000000 00011111 z = x<< 2 ; // z = 124: 00000000 00000000 00000000 01111100
  5. Desni pomak sa znakom

    int x = - 17, z; z = x >> 2; // z = -5: 11111111 11111111 11111111 11111011
  6. Desni pomak bez uzimanja u obzir predznaka

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

Kombinirane operacije

U Javi, za binarne aritmetičke operacije možete koristiti kombinirani(složeni) znakovi operatora: identifikator operacija = izraz Ovo je ekvivalentno sljedećoj operaciji: identifikator = identifikator operacija izraz Primjeri:
  1. Izraz x += b znači x = x + b.
  2. Izraz x -= b znači x = x - b .
  3. Izraz x *= b znači x = x * b .
  4. Izraz x /= b znači x = x / b.
  5. Izraz x %= b znači x = x % b .
  6. Izraz x &= b znači x = x & b .
  7. Izraz x |= b znači x = x | b.
  8. Izraz x ^= b znači x = x ^ b .
  9. Izraz x<<= b означает x = x << b .
  10. Izraz x >>= b znači x = x >> b .
  11. Izraz x >>>= b znači x = x >>> b .

Operacije usporedbe

Java definira sljedeće operatore usporedbe:
  • " == " (jednako), " != " (nije jednako),
  • " > " (veće od), " >= " (veće od ili jednako),
  • " < " (меньше) " <= " (меньше или равно)
imaju dva operanda i vraćaju booleovu vrijednost koja odgovara rezultatu usporedbe ( lažno ili pravi). Imajte na umu da kada se uspoređuju dvije količine za jednakost u Javi, kao u C i C++, simboli " == " (dva uzastopna znaka jednakosti bez razmaka), za razliku od operatora dodjele koji koristi simbol " = ". Upotreba simbola " = " pri usporedbi dviju vrijednosti ili uzrokuje pogrešku kompilacije ili dovodi do netočnog rezultata. Primjeri operacija usporedbe: boolean je jednako, nijejednako, je veće, je veće ili jednako, manje je, manje je ili jednako; int x1 = 5, x2 = 5, x3 = 3, x4 = 7; je jednako = x1 == x2; // isEqual = true isNonEqual = x1 != x2; // isNonEqual = false isGreater = x1 > x3; // isGreater = true // isGreaterOrEqual = true isGreaterOrEqual = x2 >= x3; jeManje = x3< x1; // isLess = true isLessOrEqual = x1 <= x3; // isLessOrEqual = false

Booleove operacije

Booleove operacije izvode se na Booleovim varijablama i njihov rezultat je također vrijednost tipa Booleov. Sljedeće Booleove operacije definirane su u Javi:
  • negacija "!" – zamjena lažnog s istinitim ili obrnuto;
  • I operacija "&" – rezultat je istinit samo ako su oba operanda istinita, inače je rezultat lažan;
  • OR operacija "|" – rezultat je istinit samo ako je barem jedan od operanda istinit, inače je rezultat lažan.
  • isključiva ILI operacija "^" – rezultat je istinit samo ako operandi nisu međusobno jednaki, inače je rezultat lažan.
Operacije " & ", " | " i " ^ " mogu se, kao i odgovarajuće bitne operacije, koristiti u složenim operacijama dodjele: " &= ", " |= " i " ^= " Osim toga, operacije " = " primjenjivi su na Booleove operande = " (jednako) i " != " (nije jednako). Kao što možete vidjeti iz definicije operatora OR i AND, operacija OR rezultira rezultatom true kada je prvi operand istinit, bez obzira na vrijednost drugog operanda, a operacija AND rezultira rezultatom false kada je prvi operand operand je lažan, bez obzira na vrijednost drugog operanda. Java definira još dva Booleova operatora: drugu verziju Booleovih AND i OR operatora, poznatih kao logički operatori kratkog spoja: kratko-I "&&" i kratko-spojno ILI "||". Kada koristite ove operacije, drugi operand uopće neće biti procijenjen, što je korisno u slučajevima kada ispravno funkcioniranje desnog operanda ovisi o tome je li lijevi operand istinit ili lažan. Primjeri Booleovih operacija: boolean isInRange, isValid, isNotValid, isEqual, isNotEqual; int x = 8; isInRange = x > 0 && x< 5 ; // isInRange = false isValid = x >0 || x > 5; // isValid = true isNotValid = ! isValid; // isNotValid = false isEqual = isInRange == isValid; // isEqual = false // isNotEqual = true isNotEqual = isInRange != isValid

Uvjetni rad

Uvjetna operacija je zapisana u obliku izraz-1?izraz-2:izraz-3. U ovom slučaju, prvo se procjenjuje izraz izraz-1, koji bi trebao dati Booleovu vrijednost, a zatim, ako izraz-1 ima vrijednost true, izraz-2 se procjenjuje i vraća kao rezultat operacije, ili (ako izraz- 1 daje vrijednost false), izraz-2 se procjenjuje i vraća. , kao rezultat operacije, vraća se izraz-3. Primjer uvjetne operacije: x= n> 1? 0:1; Varijabli x bit će dodijeljena vrijednost 0 ako je n>1 (izraz n>1 je istinit) ili 1 ako je n≤1 (izraz n>1 je netočan).

Radni staž

Operacije u izrazima se izvode slijeva nadesno, ali u skladu s njihovim prioritetom. Dakle, operacije množenja u izrazu y = x + z* 5; će se izvršiti prije operacije zbrajanja jer je prioritet operacije množenja veći od prioriteta operacije zbrajanja. Prioriteti operacija (redoslijedom padajućeg prioriteta) u Javi dati su u tablici. 1.
Zagrade povećavaju prvenstvo operacija koje se nalaze unutar njih. Dakle, ako umetnete zagrade u gornji izraz: y = (x + z) * 5 ; tada će se prvo izvršiti operacija zbrajanja, a zatim operacija množenja. Ponekad se zagrade koriste jednostavno kako bi izraz bio čitljiviji, na primjer: (x > 1 ) && (x<= 5 ) ;

Pretvorba i lijevanje pri izvođenju operacija

Operacije dodjele i aritmetički izrazi mogu koristiti literale, varijable i izraze raznih vrsta, na primjer: dvostruko y; bajt x; y = x + 5; Ovaj primjer dodaje bajt varijablu x int literalu 5 i dodjeljuje rezultat dvostrukoj varijabli y. U Javi, kao iu jeziku C, pretvorbe tipa pri vrednovanju izraza mogu se izvesti automatski ili pomoću operatora pretvaranja tipa. Međutim, pravila za pretvaranje tipa malo su drugačija od pravila jezika C i općenito su stroža nego u jeziku C. Prilikom izvođenja operacije dodjele, pretvorba tipa događa se automatski ako širenje transformacije(pretvorba proširenja) i dvije vrste su kompatibilne. Transformacije koje se šire su transformacije bajt® kratak® int® dugo® plutati® dvostruko. Za proširenje konverzija, numerički tipovi, uključujući cijeli broj i pokretni zarez, kompatibilni su jedni s drugima. Međutim, numerički tipovi nisu kompatibilni s tipovima char i Boolean. Tipovi char i boolean također su međusobno nekompatibilni. Java također izvodi automatsku konverziju tipa kada pohranjuje literalnu cjelobrojnu konstantu (koja je zadana int) u varijabli tipa byte, short ili long (međutim, ako literal ima vrijednost izvan raspona važećih vrijednosti za taj tip, izdaje se poruka o pogrešci: mogući gubitak točnosti). Ako je pretvorba sužavajuća pretvorba, to jest ako se izvodi byte ¬ short ¬ char ¬ int ¬ long ¬ float ¬ dvostruka pretvorba, tada takva pretvorba može dovesti do gubitka preciznosti broja ili do njegovog iskrivljenja. Stoga se tijekom konverzija sužavanja, prilikom prevođenja programa, prikazuje dijagnostička poruka o nekompatibilnosti tipa i datoteke klase se ne stvaraju. Ova će se poruka također prikazati ako pokušate pretvoriti izraz tipa byte ili short u varijablu tipa char. Ako je još uvijek potrebno izvršiti takve pretvorbe, koristi se operacija pretvaranja tipa koja ima sljedeći format: ( pretvorba tipa) značenje, Gdje pretvorba tipa određuje tip u koji se dati podaci moraju pretvoriti značenje, na primjer, kao rezultat izvršavanja operatora: byte x = 71 ; simbol char = (char ) x; varijabla simbola dobit će vrijednost " G ". Ako je vrijednost s pomičnim zarezom dodijeljena tipu cijelog broja, tada (ako vrijednost s pomičnim zarezom ima razlomački dio) dolazi i do eksplicitne pretvorbe tipa skraćivanje(skraćeni) brojevi. Dakle, kao rezultat izvršavanja operatora int x = (int) 77.85; varijabla x će dobiti vrijednost 77 . Ako je dodijeljena vrijednost izvan raspona pretvorba tipa , tada će rezultat transformacije biti ostatak dijeljenja vrijednosti s modulom raspona dodijeljenog tipa (za brojeve tipa byte, modul raspona bit će jednak 256, kratko – 65536, za int – 4294967296 i na duže – 18446744073709551616). Na primjer, kao rezultat izvršavanja operatora byte x = (byte ) 514 ; varijabla x će dobiti vrijednost 2. Prilikom pretvaranja cijelih ili realnih brojeva u podatke tipa char, pretvaranje u znak se događa ako je izvorni broj u rasponu od 0 do 127, inače znak dobiva vrijednost "?". Prilikom izvođenja aritmetičkih i bitovnih pretvorbi, sve bajtove i kratke vrijednosti, kao i char, proširuju se na int, (s numeričkom vrijednošću koda znaka korištenog u izračunima za char) tada, ako je barem jedan operand tipa long , tip cjelobrojnog izraza se proširuje na long . Ako je jedan od operanda tipa float, tada se tip punog izraza proširuje na float, a ako je jedan od operanda tipa double, tada je tip rezultata double. Dakle, ako su varijable byte a, c; kratko b; zatim u izrazu a + b* c – 15 L + 1,5F + 1,08 - 10; prvo, prije izračunavanja a + b*c, vrijednosti varijabli će se proširiti na int, zatim, budući da je konstanta 15 tipa long, rezultat izračuna će se proširiti na long prije oduzimanja. Nakon toga, budući da je literal 1.5 tipa float, prije zbrajanja s ovim literalom, rezultat procjene a + b*c – 15L bit će proširen na float. Prije izvođenja zbrajanja na broju 1.08, rezultat prethodnih izračuna će se proširiti na double (budući da su stvarne konstante tipa double prema zadanim postavkama) i na kraju, prije nego što se izvede posljednje zbrajanje, literal 10 (zadano int) bit će proširen na dvostruko . Stoga će rezultat vrednovanja izraza biti tipa double. Automatska proširenja tipa (osobito short i byte to int proširenja) mogu uzrokovati loše prepoznate pogreške tijekom kompilacije. Na primjer, u operatorima: bajt x = 30 , y = 5 ; x = x + y; Varijable x i y bit će proširene na int prije nego što se izvrši zbrajanje, a zatim će se prikazati poruka o pogrešci kada se pokuša dodijeliti rezultat int varijabli byte. Da biste to izbjegli, morate koristiti eksplicitnu konverziju tipa u drugom operatoru: x = (bajt) (x + y) ; Izraz x + y mora biti u zagradama jer je prvenstvo operacije pretvaranja tipa u zagradama veće od prioriteta operacije zbrajanja. Usput, ako napišete drugi operator u obliku: x += y; tada neće biti poruke o grešci. Link na prvi

1. Osnovne računske operacije

Sljedeća tablica navodi osnovne aritmetičke operacije koje se koriste u jeziku Java:

Pogledajmo neka pravila za rad s aritmetičkim operacijama:

  • Izrazi se vrednuju slijeva nadesno osim ako se ne dodaju zagrade ili određene operacije imaju prednost.
  • Operatori *, / i % imaju veći prioritet od + i -.

Primjer 1: Aritmetičke operacije nad cjelobrojnim vrijednostima

Na primjer, u ovom kodu, varijable a I b imat će različita značenja:

Javna klasa BasicIntMath ( public static void main(String args) ( int a = 4 + 5 - 2 * 3; int b = 4 + (5 - 2) * 3; System.out.println("a = " + a) ; System.out.println("b = " + b); ) )

Rezultat izvršenja:

A = 3 b = 13

  • Unarna operacija oduzimanja mijenja predznak svog jedinog operanda.
  • Unarni operator zbrajanja jednostavno vraća vrijednost svog operanda. U principu nije potrebno, ali je moguće.

Primjer 2. Unarne operacije zbrajanja i oduzimanja

javna klasa UnarySignOperation ( public static void main(String args) ( double a = -6; double b = +6; System.out.println(a); System.out.println(b); ) )
  • Kada se operacija dijeljenja izvodi na cjelobrojnom tipu podataka, njen rezultat neće sadržavati frakcijsku komponentu.

Primjer 3: Dijeljenje cijelih brojeva

javna klasa IntDivision ( public static void main(String args) ( int a = 16 / 5; System.out.println(a); ) )

Rezultat pokretanja ovog programa:

  • Operandi aritmetičkih operacija moraju biti numeričkog tipa. Aritmetičke operacije ne mogu se izvoditi na Booleovim tipovima podataka, ali su dopuštene na tipovima podataka char jer je u Javi ovaj tip u biti vrsta tipa int.

Primjer 4. Aritmetičke operacije nad varijablama tipa char

javna klasa BasicCharMath1 ( public static void main(String args) ( char c = "n"; System.out.println(c); System.out.println(c + 1); System.out.println(c / 5) ;))

Rezultat izvršenja:

N 111 22

Primjer 5. Aritmetičke operacije nad varijablama tipa char

javna klasa BasicCharMath2 ( public static void main(String args) ( char c1 = "1"; char c2 = "\u0031"; char c3 = 49; System.out.println(c1 + c2 + c3); ) )

Rezultat izvršenja:

    Operator dijeljenja modula označava se simbolom %. Ovaj operator vraća ostatak kada se prvi broj podijeli s drugim. Kada dijelite cijeli broj, rezultat će također biti cijeli broj.

Primjer 6. Modulo dijeljenje

javna klasa DivisionByModule ( public static void main(String args) ( int a = 6 % 5; double b = 6.2 % 5.0; System.out.println(a); System.out.println(b); ) )

Rezultat izvršenja:

1 1.2000000000000002

2. Složene računske operacije s dodjelom

Java ima posebne operatore koji kombiniraju aritmetičke operacije s operatorom dodjele. Razmotrite sljedeći izraz:

A = a + 4;

U Javi se ova operacija može napisati na sljedeći način:

A += 4;

Složeni operatori dodjele ne samo da smanjuju veličinu koda, već vam također omogućuju izvođenje automatskih pretvorbi koje obični operatori ne mogu.

Primjer 5: Složene aritmetičke operacije s dodjelom

javna klasa CompoundOperations ( public static void main(String args) ( int a = 1; int b = 2; int c = 3; a += 3; b *= 2; c += a * b; System.out.println (a); System.out.println(b); System.out.println(c); ) )

Najbolji članci na temu