Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Zanimljiv
  • Što žena muž znači na java jeziku. Operatori u Javi

Što žena muž znači na java jeziku. Operatori u Javi

Java pruža bogat skup operatora za manipulaciju varijablama. Svi Java operatori mogu se podijeliti u sljedeće grupe:

  • aritmetički operatori;
  • operatori usporedbe;
  • bitni operatori;
  • logički operatori;
  • operatori dodjele;
  • drugi operateri.

Aritmetički operatori

Aritmetički operatori- koriste se u matematički izrazi na isti način na koji se koriste u algebri. Pretpostavimo da je cjelobrojna varijabla A 10, a varijabla B 20. Sljedeća tablica navodi aritmetičke operatore u Javi:

Primjer

Sljedeći jednostavan primjer pokazuje aritmetičke operatore programski. Kopirajte i zalijepite sljedeći java kod u test.java datoteku, kompajlirajte i pokrenite ovaj program:

Test javne klase (javni statički void main(String args) ( int a = 10; int b = 20; int c = 25; int d = 25; System.out.println("a + b = " + (a + b )); System.out.println("a - b = " + (a - b)); System.out.println("a * b = " + (a * b)); System.out.println(" b / a = " + (b / a)); System.out.println("b % a = " + (b % a)); System.out.println("c % a = " + (c % a )); System.out.println("a++ = " + (a++)); System.out.println("b-- = " + (a--)); // Provjerite razliku u d++ i ++d System .out.println("d++ = " + (d++)); System.out.println("++d = " + (++d)); ) )

A + b = 30 a - b = -10 a * b = 200 b / a = 2 b % a = 0 c % a = 5 a++ = 10 b-- = 11 d++ = 25 ++d = 27

Operatori za usporedbu

U jeziku Java podržani su sljedeći operatori usporedbe. Pretpostavimo da je varijabla A 10, a varijabla B 20. Sljedeća tablica navodi relacijske ili usporedne operatore u Javi:

OperaterOpisPrimjer
== Provjerava jesu li vrijednosti dvaju operanda jednake ili ne, ako jesu, tada uvjet postaje istinit(A == B) - nije točno
!= Provjerava jesu li vrijednosti dvaju operanda jednake ili ne, ako vrijednosti nisu jednake onda uvjet postaje istinit(A != B) - vrijednost je istinita
> Provjerava je li vrijednost lijevog operanda veća od vrijednosti desnog operanda, ako je tako, tada uvjet postaje istinit(A > B) - nije točno
Provjerava je li vrijednost lijevog operanda manja od vrijednosti desnog operanda, ako je odgovor da, uvjet postaje istinit(A
>= Provjerava je li vrijednost lijevog operanda veća ili jednaka vrijednosti desnog operanda, ako je tako, tada uvjet postaje istinit(A >= B) - vrijednost nije točna
Testira je li vrijednost lijevog operanda manja ili jednaka vrijednosti desnog operanda, ako da, onda uvjet postaje istinit(A

Primjer

Sljedeći jednostavan primjer prikazuje operatore programske usporedbe u Javi. Kopirajte i zalijepite sljedeći java kod u test.java datoteku, kompajlirajte i pokrenite ovaj program:

Test javne klase (javni statički void main(String args) (int a = 10; int b = 20; System.out.println("a == b = " + (a == b)); System.out.println ("a != b = " + (a != b)); System.out.println("a > b = " + (a > b)); System.out.println("a = a = " + (b >= a)); System.out.println("b

A == b = netočno a != b = točno a > b = netočno a = a = točno b

Bitwise operatori

Java definira nekoliko bitnih operatora koji se mogu primijeniti na cjelobrojne vrste: int, long, short, char i byte. U Javi, bitni operator radi s bitovima i izvodi operaciju bit po bit. Pretpostavimo da je a = 60; i b = 13; tada će u binarnom formatu biti kako slijedi:

a = 0011 1100
b = 0000 1101
-----------------
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a = 1100 0011

Pretpostavimo da je cjelobrojna varijabla A 60, a varijabla B 13. Sljedeća tablica navodi bitne operatore u Javi:

OperaterOpisPrimjer
& (bitno i)Binarni AND operator malo kopira rezultat ako postoji u oba operanda.(A & B) će dati 12 što je 0000 1100
| (bitno ili)Binarni OR operator kopira bit ako postoji u bilo kojem od operanada.(A | B) će dati 61 što je 0011 1101
^ (bitno logički ili)Binarni XOR operator malo kopira ako je postavljen u jednom operandu, ali ne oba.(A^B) će dati 49 što je 0011 0001
~ (komplement u bitovima)Operator binarnog komplementa i ima učinak "reflektiranja" bitova.(~A) će dati -61 što je komplement od 1100 0011 u binarnom zapisu
Binarni lijevi operator pomaka. Vrijednost lijevih operanada se pomiče ulijevo za broj bitova specificiranih desnim operandom.A
>> (pomak udesno)Binarni desni operator pomaka. Vrijednost desnih operanada pomiče se udesno za broj bitova koji je dao lijevi operand.>> 2 će dati 15 što je 1111
>>> (nulti pomak udesno)Operator nulte desne pomake. Vrijednost lijevih operanada se pomiče udesno za broj bitova specificiranih desnim operandom, a pomaknute vrijednosti su ispunjene nulama.>>> 2 će dati 15 što je 0000 1111

Primjer

Sljedeći jednostavan primjer pokazuje kako programski koristiti bitne operatore u Javi. Kopirajte i zalijepite sljedeći java kod u test.java datoteku, kompajlirajte i pokrenite ovaj program:

Test javne klase ( public static void main(String args) ( int a = 60; /* 60 = 0011 1100 */ int b = 13; /* 13 = 0000 1101 */ int c = 0; c = a & b; /* 12 = 0000 1100 */ System.out.println("a & b = " + c); c = a | b; /* 61 = 0011 1101 */ System.out.println("a | b = " + c); c = a ^ b; /* 49 = 0011 0001 */ Sustav. out. println("a ^ b = " + c); c = ~a; /*-61 = 1100 0011 */ Sustav. out.println("~a = " + c); c = a > 2; /* 215 = 1111 */ System.out.println("a >> 2 = " + c); c = a >>> 2 ; /* 215 = 0000 1111 */ System.out.println("a >>> 2 = " + c); ) )

Dobit će se sljedeći rezultat:

A&b = 12 a | b = 61 a ^ b = 49 ~a = -61 a > 15 a >>> 15

Logički operatori

Pretpostavimo da je logička varijabla A istinita, a varijabla B netočna. Sljedeća tablica navodi logičke operatore u Javi:

Primjer

Test javne klase (javni statički void main(String args) (boolean a = true; boolean b = false; System.out.println("a && b = " + (a&&b)); System.out.println("a | | b = " + (a||b)); System.out.println("!(a && b) = " + !(a && b)); ) )

To će proizvesti sljedeći rezultat:

A && b = netočno a || b = istina !(a && b) = istina

Operatori dodjele

Jezik Java podržava sljedeće operatore dodjeljivanja:

Operater Opis Primjer
= Jednostavan operator dodjele, dodjeljuje vrijednosti s desne strane operanda na lijevu stranu operanda C = A + B, dodijelit će vrijednost A + B u C
+= Operator dodjele "Addition", on dodjeljuje vrijednosti desnog operanda lijevom operandu C += A, ekvivalentno C = C + A
-= Operator dodjele "Oduzmi", oduzima lijevi operand od desnog C -= A, ekvivalentno C = C - A
*= Operator dodjele "Množi", množi desni operand s lijevim operandom C*=A je ekvivalentno C=C*A
/= Operator dodjele "Division", dijeli lijevi operand desnim operandom C /= A je ekvivalentno C = C / A
%= Operator dodjeljivanja "Modulus", uzima modul, s dva operanda, i dodjeljuje svoj rezultat lijevom operandu C %= A, ekvivalentno C = C % A
Operator dodjele "Shift lijevo" C
>>= Operator dodjele desne pomake C >>= 2 je kao C = C >> 2
&= Operator dodjeljivanja "I" u bitovima C&=2, to je kao C=C&2
^= Operator dodjele XOR-a po bitu C^=2, to je kao C=C^2
|= Operator dodjeljivanja u bitu "OR" ("OR") C |= 2, to je kao C = C | 2

Primjer

Sljedeći jednostavan primjer pokazuje programski logičke operatore u Javi. Kopirajte i zalijepite sljedeći java kod u test.java datoteku, kompajlirajte i pokrenite ovaj program:

Test javne klase (javni statički void main(String args) (int a = 10; int b = 20; int c = 0; c = a + b; System.out.println("c = a + b = " + c ); c += a ; System.out.println("c += a = " + c); c -= a ; System.out.println("c -= a = " + c); c *= a ; System.out.println("c *= a = " + c); a = 10; c = 15; c /= a ; System.out.println("c /= a = " + c); a = 10; c = 15; c %= a ; System.out.println("c %= a = " + c); c >= 2 ; System.out.println("c >>= 2 = " + c) ; c >>= 2 ; System.out.println("c >>= a = " + c); c &= a ; System.out.println("c &= 2 = " + c); c ^= a ; System.out.println("c ^= a = " + c); c |= a ; System.out.println("c |= a = " + c); ) )

Dobit će se sljedeći rezultat:

C = a + b = 30 c += a = 40 c -= a = 30 c *= a = 300 c /= a = 1 c %= a = 5 c >= 2 = 5 c >>= 2 = 1 c &= a = 0 c ^= a = 10 c |= a = 10

Ostali operateri

Postoji nekoliko drugih operatora koje podržava jezik Java.

Ternarni operator ili uvjetni operator (?:)

Ternarni operator- operator koji se sastoji od tri operanda i koristi se za procjenu booleovih izraza. Ternarni operator u Javi također je poznat kao uvjetni operator. Ovaj. Cilj ternarnog operatora ili uvjetni operator je odlučiti koju vrijednost treba dodijeliti varijabli. Operator se piše kao:

Varijabla x = (izraz) ? vrijednost ako je istinito: vrijednost ako je netočno

Primjer

Ispod je primjer:

Test javne klase (javni statički void main(String args)( int a , b; a = 10; b = (a == 1) ? 20: 30; System.out.println("Vrijednost b: " + b) ; b = (a == 10) ? 20: 30;System.out.println("Vrijednost b: " + b); ) )

Dobit će se sljedeći rezultat:

b vrijednost: 30 b vrijednost: 20

instanceof operator

instanceof operator- provjerava je li objekt određeni tip(tip klase ili tip sučelja) i koristi se samo za varijable referenciranog objekta. Operator instanceof piše se kao:

(Varijabla referentnog objekta) instanceof (klasa/vrsta sučelja)

Primjeri

Ako referencirana varijabla objekta na lijevoj strani izraza prođe test za klasu/tip sučelja na desna strana, rezultat je istinit. Ispod je primjer i opis operatora instanceof:

Test javne klase ( public static void main(String args)( String name = "Oleg"; // Sljedeće će vratiti true jer je tip String boolean rezultat = ime instanceof String; System.out.println(result); ) )

Dobit će se sljedeći rezultat:

Ovaj će operator i dalje vratiti true ako je objekt koji se uspoređuje kompatibilan s tipom s desne strane dodjele. Ispod je još jedan primjer:

Klasa Vozilo () javna klasa Auto proširuje Vozilo (javni statički void main(String args)( Vozilo a = novi automobil(); booleov rezultat = instanca automobila; System.out.println(rezultat); ) )

Dobit će se sljedeći rezultat:

Prioritet operatora u Javi

Prioritet operatora određuje grupiranje pojmova u izrazu. To utječe na način na koji se izraz evaluira. Neki operateri imaju veći prioritet od drugih; na primjer, operator množenja ima veći prioritet od operatora zbrajanja:

Na primjer, x = 7 + 3 * 2. Ovdje je x dodijeljena vrijednost 13, a ne 20, jer operator "*" ima veći prioritet od "+", pa se prvo množi "3 * 2", a zatim "7 "dodano".

U tablici se operatori s najvećim prioritetom postavljaju na vrh, a razina prvenstva se smanjuje prema dnu tablice. U izrazu, visoki prioritet operatora u Javi će se evaluirati s lijeva na desno.

Kategorija Operater Asocijativnost
Postfix () . (točka) S lijeva na desno
unarno ++ - - ! ~ S desna na lijevo
Multiplikativno * / % S lijeva na desno
aditiv + - S lijeva na desno
Shift >> >>> S lijeva na desno
relacijski > >= S lijeva na desno
Jednakost == != S lijeva na desno
Bitno "I" & S lijeva na desno
Bitova isključiva "OR" ("XOR") ^ S lijeva na desno
Bitno "OR" ("OR") | S lijeva na desno
Logično "AND" ("AND") && S lijeva na desno
Logično "ILI" ("ILI") || S lijeva na desno
Uvjetovana ?: S desna na lijevo
Zadatak = += -= *= /= %= >>= S desna na lijevo
Zarez , S lijeva na desno

U sljedećoj lekciji govorit ćemo o kontroli petlje u Java programiranju. Ova lekcija će opisati različite vrste petlji, kako se petlje mogu koristiti u razvoju programa i za koje se svrhe koriste.

Operatori u Javi

Java podržava sljedeće aritmetičke operatore (Tablica 2.4).

Tablica 2.4. Aritmetički operatori

Dodatak
- Oduzimanje
* Množenje
/ Podjela
Izračun % ostatka
++ Povećanje
-- Smanjenje
+= Zadatak s dodatkom
-= Zadatak s oduzimanjem
*= Zadatak s množenjem
/= Zadatak s dijeljenjem
%= Zadatak s izračunom ostatka

Prvih pet operatera svima je poznato školski tečaj matematike i dva takozvana unarna operatora, a mogu se koristiti za označavanje predznaka zadanog broja. Zatim slijede operatori koji se nazivaju inkrement (++) i dekrement (- -).
Jedan od njih (inkrement) dodaje vrijednost varijabilna jedinica, drugi (dekrement), naprotiv, smanjuje jedinicu.

Ovi operatori su navedeni bez razmaka pored vrijednosti varijable. Ako se nalaze lijevo od varijable, onda se to naziva prefiksni oblik povećanja ili dekrementa, a to znači da se prvo dodaje (ili oduzima) varijabli, a zatim se koristi u izrazu. Ako se inkrement (ili dekrement) postavi iza imena varijable, onda se to zove postfiksni oblik, a to znači da se varijabla najprije koristi u izrazu, a zatim joj se dodaje (ili oduzima) jedan.

Preostalih pet operatora koristi se na sljedeći način:
a += b
slično unosu:
a = a + b

Primjer korištenja svih ovih operatora prikazan je u Listingu 2.9.

Listing 2.9.
Primjer upotrebe aritmetički operatori

classExample(
{
int a,b,c,d,e;
a=10
b=11;
c=12;
a+ = b; // a=21
a *= c; // a = 252
a = a - c; // a = 240
a -= c; // a = 228
d=5;
e = 10;
System.out.println(++d); Izlaz 6
System.out.println(d++); Izlaz 6
System.out.println(e--) ; Izlaz 10
System.out.println (--e) ; Izlaz 8
}
}

Sada razmotrite bitne (bitove) operatore (tablica 2.5).

Tablica 2.5. Bitni (bitni) operatori

Opis operatera
- Unarna negacija
& Bitwise AND
| Bitno ILI
^ Bitni XOR
<< Сдвиг битов влево
>> Bit pomak udesno
>>> Pomak bita udesno, ispunjavajući visoki bit nulom
&=, | =, ^=, <<=, >>=, >>>= Zadatak sa sličnom operacijom

Uz pomoć ovih operatora radimo na brojevima u njihovom binarnom prikazu. Razmotrimo, na primjer, pisanje broja 15 u binarnom obliku. 00001111

Prvi operator, nazvan unarna negacija, pretvara 0 u 1, a 1 u 0. Bitni operator "i" na kraju proizvodi 1 ako oba ista bita uspoređenih brojeva također imaju 1. Ako imaju različitu kombinaciju brojeva, rezultat će biti 0. Na primjer:
C = A i B

Pretpostavimo da je A = 15 (00001111) i B je 10 (00001010). Broj C u ovom slučaju bit će jednak 10 (00001010). Bitno "OR" znači sljedeće: ako je barem jedan od bitova 1, tada je rezultat također 1. Bitno isključivi "OR" vraća 1 ako je samo jedan od bitova uspoređenih brojeva 1. Sljedeća tri operatora se pomaknu bitove ulijevo za navedeni broj bitova, štoviše, pomicanje bitova ulijevo ispunjava prazne pozicije nulama. Primjer uporabe ovih operatora dat je u tablici. 2.6 i listing 2.10.

Tablica 2.6. Operatori pomaka bitova

Listing 2.10.
Primjer korištenja operatora pomaka bita

primjer razreda
{
javni statički void main (args niza)
{
int a=3, b=4, c=5;
int d = a*b;
System.out.println(d);
d = a | c;
System.out.println(d);
d &= a;
System.out.println(d);
}
}

Java također podržava logičke operatore prikazane u tablici 1. 2.7.

Tablica 2.7. Logički operatori

Opis operatera
= = Jednako
!= Nije jednako
< Меньше
< = Меньше или равно
> Više
> = Veće ili jednako
& Boolean i
| Boolean ili
^ Boolean XOR
! Negacija
&& Uvjetno i
| | Uvjetni ili
&=, |=, ^= Dodjela sa sličnim operatorom

Prvih šest operatora nazivaju se operatori usporedbe. Omogućuju vam da usporedite brojeve i vratite točno ili netočno. Sljedeća četiri operatora rade na booleovim podacima, ali rade slično sličnim bitnim operatorima (samo promijenite bit 0 u false i bit 1 u true).

Sljedeće dvije izjave koriste se za dva uvjeta odjednom, t.j. navedena su dva uvjeta i između njih se postavlja "uvjetni I" operator. Ako oba procijene na istinito, onda je istina izlaz; ako je barem jedan od njih lažan, tada će rezultat biti lažan.

Uvjet ili operator će vratiti true ako je barem jedan od uvjeta istinit. Obično se koriste u konstrukciji if (o tome ćemo govoriti u sljedećem poglavlju). Primjer korištenja svih ovih operatora prikazan je u Listingu 2-11.

Listing 2.11.
Primjer upotrebe logičke operatore

primjer razreda
{
javni statički void main (args niza)
{
int a = 10, b=15, c=20;
boolean b1 = a != b;
boolean b2 = c > a;
boolean b3 = b1 & b2;
boolean b4 = b3^b1;
if (b1 && b4 == false) // Ako je b1 != b4 onda:
b3 = istina;
ostalo // Ako ne, onda:
b2=netočno;
}
}

Navedimo shemu za korištenje logičkih operatora (tablica 2.8).

Tablica 2.8. Vrijednosti logičkog operatora za dvije varijable

Većina operacija na primitivni tipovi ne radi se metodama, nego sa posebni znakovi pozvao znak operacije.

operacija dodjele

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

Unarne operacije

Java definira sljedeće unarne operacije:
  • unarno minus "-" - mijenja predznak broja ili izraza u suprotan;
  • unarni plus " + " - ne izvodi nikakve operacije nad brojem ili izrazom;
  • 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;
  • dekrementirati " -- " (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 komplementa po bitu: int a = 15 ; intb; b=~a; // b = -16 Brojevi a i b su int , t.j. su interno predstavljeni od strane računala kao predpisani binarni cijeli brojevi duljine 32 bita, dakle binarni prikaz brojevi a i b izgledat će ovako: a = 00000000 00000000 00000000 00001111 b = 11111111 11111111 11111111 11110000 . Decimalni prikaz broja b bio bi -16. Znakovi operatora inkrementa i dekrementa mogu se postaviti prije ili iza varijable. Ove opcije se nazivaju respektivno prefiks I postfiks evidentiranje ovih transakcija. Zapis prefiksa za prijavu operatora vraća vrijednost svog operanda nakon evaluacija izraza. Uz postfiksnu notaciju, znak operacije isprva vraća vrijednost svog operanda i tek tada 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 se x prvo povećati za 1, a zatim će rezultat biti dodijeljen varijabli y. Varijabli z bit će dodijeljena vrijednost 1 jer će z prvo biti dodijeljena vrijednost, a zatim će se x povećati za 1. U oba slučaja, nova vrijednost x bit će 2. Treba napomenuti da se u Javi, za razliku od jezika C, operacije smanjivanja i povećanja mogu primijeniti i na stvarne varijable ( plutajući tip i dvostruko). Binarni znakovi 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čun 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 će biti 2, a rezultat operacije (-7) %(-4) bit će jednak -3. U Java operacija također se može koristiti za stvarne varijable (tip float ili double).
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 // frakcijski dio odbačen) x5 = x%4 // x5 = 3 (ostatak od dijeljenja// 7 po 4)

Bitne operacije

  • Bitne operacije uzimaju u obzir original brojčane vrijednosti kao bitna polja i izvršite sljedeće radnje na njima:
  • postavljajući ritam na i--ta pozicija polja rezultata je 1 ako su oba bita unutra i-th pozicije operanda jednake su 1, ili 0 inače bitskom AND (" & ");
  • postavljajući ritam na i--ta pozicija polja rezultata je 1 ako se nalazi barem jedan bit i-th pozicija operanada je 1, ili 0 inače - bitovsko ILI (" | ");
  • postavljajući ritam na i--ta pozicija polja rezultata je 1 ako su bitovi u i-th pozicije operanada nisu jednake jedna drugoj, ili 0 u suprotnom - bitova isključiva ILI (" ^ ");
  • pomak ulijevo od bitova polja prvog operanda za broj bitova koji je određen drugim operandom (značni bit broja se u ovom slučaju ne mijenja) - bitski pomak ulijevo, uzimajući u obzir predznak "<< ";
  • pomak udesno od bitova polja prvog operanda za broj bitova koji je određen drugim operandom (značni bit broja se u ovom slučaju ne mijenja) – bitski pomak udesno, uzimajući u obzir predznak " >> ";
  • pomak udesno od bitova polja prvog operanda za broj bitova određen drugim operandom (značni bit broja je također pomaknut u ovom slučaju) - bitni pomak udesno bez uzimanja u obzir ">>>" znak.
Primjeri bitnih operacija:
  1. Bitno I

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

    int x = 112; // x: 00000000 00000000 00000000 01110000 int y = 94; // y: 00000000 00000000 00000000 01011110 intz; z=x | y; // z = 126: 00000000 00000000 00000000 01111110
  3. Bitni XOR

    int x = 112; // x: 00000000 00000000 00000000 01110000 int y = 94; // y: 00000000 00000000 00000000 01011110 intz; z=x^y; // z = 46: 00000000 00000000 00000000 00101110
  4. Lijevi pomak sa predznakom

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

    int x = - 17 , z; z = x >> 2 ; // z = -5: 11111111 11111111 11111111 11111011
  6. Pomak udesno bez znaka

    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 kombinirano(složeni) znakovi operacije: identifikator operacije = izraz Ovo je ekvivalentno sljedećoj operaciji: identifikator = izraz identifikator operacije 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 ili jednako),
  • " < " (меньше) " <= " (меньше или равно)
imaju dva operanda i vraćaju booleovu vrijednost koja odgovara rezultatu usporedbe ( lažno ili pravi). Imajte na umu da kada uspoređujete dvije vrijednosti za jednakost u Javi, kao u C i C++, simboli " == " (dva uzastopna znaka jednakosti bez razmaka), za razliku od operatora dodjeljivanja koji koristi znak " = ". Korištenje simbola "=" prilikom usporedbe dviju vrijednosti ili uzrokuje pogrešku u vremenu prevođenja ili daje netočan rezultat. Primjeri operacija usporedbe: boolean isEqual, isNonEqual, isGreater, isGreaterOrEqual, isManje, isManje 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; je manje = 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 boolean. Java definira sljedeće booleove operacije:
  • negacija "!" – zamjena false s true ili obrnuto;
  • operator I "&" – rezultat je istinit samo ako su oba operanda istinita, u suprotnom je rezultat lažan;
  • OR operacija "|" - rezultat je istinit samo ako je barem jedan od operanada istinit, inače je rezultat lažan.
  • XOR operator "^" - rezultat je istinit samo ako operandi nisu međusobno jednaki, inače je rezultat lažan.
Operatori "&", "|" i "^", kao i odgovarajući bitni operatori, mogu se koristiti u složenim operatorima 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 procjenjuje se na true kada je prvi operand istinit, bez obzira na vrijednost drugog operanda, a operacija AND procjenjuje se na false kada je prvi operand lažan, bez obzira na vrijednost drugog operanda. Java definira još dva Booleova operatora: druge verzije Booleovih AND i OR operatora, poznatih kao Booleov operatori kratkog spoja: kratki spoj AND " && " i kratki spoj OR " || ". Kada koristite ove operacije, drugi operand se uopće neće evaluirati, što je korisno u slučajevima kada ispravno funkcioniranje desnog operanda ovisi o tome je li lijevi operand istinit ili netoč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 = istina isNotValid = ! isVrijedan; // isNotValid = false isEqual = isInRange == isValid; // isEqual = false // isNotEqual = true isNotEqual = isInRange != isValid

Uvjetni rad

Uvjetni operator je napisan u obliku izraz-1?izraz-2:izraz-3. Ovo prvo procjenjuje izraz-1 , koji bi trebao dati Booleovu vrijednost, a zatim, ako izraz-1 ima vrijednost true , procjenjuje i vraća izraz-2 kao rezultat operacije, ili (ako izraz-1 ima vrijednost false), procjenjuje i , izraz-3 se vraća kao rezultat operacije. Primjer uvjetne operacije: x= n> 1? 0:1; Varijabli x bit će dodijeljena vrijednost 0 ako je n>1 (izraz n>1 daje vrijednost true) ili 1 ako je n≤1 (izraz n>1 daje vrijednost false).

Prednost operacije

Operacije u izrazima se izvode s lijeva na desno, međutim, prema njihovom prioritetu. Dakle, operacije množenja u izrazu y = x + z* 5 ; izvršit će se prije operacije zbrajanja jer operacija množenja ima veći prioritet od operacije zbrajanja. Prioriteti operacija (po opadajućem prioritetu) u Javi dati su u tablici. jedan.
Zagrade povećavaju prednost operacijama koje se nalaze unutar njih. Dakle, ako u gornji izraz umetnete zagrade: y = (x + z) * 5 ; tada će se prvo izvesti operacija zbrajanja, a zatim operacija množenja. Ponekad se zagrade koriste jednostavno kako bi izraz bio čitljiviji, na primjer: (x > 1 ) && (x<= 5 ) ;

Pretvorba tipa i lijevanje prilikom izvođenja operacija

Operacije dodjeljivanja i aritmetički izrazi mogu koristiti literale, varijable i izraze različitih tipova, na primjer: double y; bytex; y = x + 5; Ovaj primjer dodaje bajt varijablu x i literal 5 (int tip) i dodjeljuje rezultat dvostrukoj varijabli y. U Javi, kao iu jeziku C, pretvorbe tipova u evaluaciji izraza mogu se izvesti automatski, ili uz pomoć operatora za ubacivanje tipa. Međutim, pravila za uvođenje tipova donekle se razlikuju od pravila jezika C i općenito su stroža nego u jeziku C. Prilikom izvođenja operacije dodjeljivanja, konverzija tipa se automatski događa ako proširenje transformacije(proširujuća konverzija) i dvije vrste su kompatibilne. Transformacije širenja su transformacije bajt® kratak® int® dugo® plutati® dvostruko. Za pretvorbe proširenja, numerički tipovi, uključujući cijeli broj i pokretni zarez, međusobno su kompatibilni. Međutim, numerički tipovi nisu kompatibilni s char i booleovim tipovima. Tipovi char i boolean također nisu međusobno kompatibilni. Jezik Java također izvodi automatsku konverziju tipa kada sprema literalnu integer konstantu (koja ima tip int prema zadanim postavkama) u varijable tipa byte , short ili long (međutim, ako literal ima vrijednost izvan raspona važećih vrijednosti za tog tipa, javlja se poruka o pogrešci: mogući gubitak preciznosti). Ako se pretvorba sužava (pretvorba sužavanja), odnosno pretvorba je byte ¬ short ¬ char ¬ int ¬ long ¬ float ¬ double , tada takva konverzija može dovesti do gubitka preciznosti broja ili do njegovog izobličenja. Stoga sužavanje konverzija generira dijagnostiku nekompatibilnosti tipa kada se program prevede, a datoteke klasa se ne generiraju. Takva će se poruka također izdati kada pokušate pretvoriti izraze tipa byte ili short u varijablu tipa char. Ako još uvijek trebate izvesti takve pretvorbe, upotrijebite operaciju cast koja ima sljedeći format: ( vrsta konverzije) značenje, gdje vrsta konverzije definira tip u koji će se dati konvertirati značenje, na primjer, kao rezultat izvršavanja naredbi: bajt x = 71 ; char simbol = (char ) x; varijabla simbola bit će postavljena na " G ". Ako je vrijednost s pomičnim zarezom dodijeljena cjelobrojnom tipu, tada (ako vrijednost s pomičnim zarezom ima razlomački dio) dolazi i do eksplicitne konverzije 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 pretvorbe biti ostatak dijeljenja vrijednosti s modulom raspona dodijeljenog tipa (za brojeve tipa bajt, modul raspona će biti 256 , kratko - 65536 , za int - 4294967296 i dugo - 18446744073709551616). Na primjer, kao rezultat izvršavanja naredbe byte x = (byte ) 514 ; varijabla x će dobiti vrijednost 2 . Prilikom pretvaranja cijelih brojeva ili plutajućih u char podatke, pretvorba u znak se događa ako je izvorni broj između 0 i 127, inače je znak postavljen na "?". Prilikom izvođenja aritmetičkih i bitnih pretvorbi, sve bajtove i kratke vrijednosti, kao i vrijednosti char, proširuju se na int , (dok se numerička vrijednost koda znaka koristi 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 operanada tipa float, tada se tip punog izraza proširuje na float, a ako je jedan od operanada tipa double, tada je tip rezultata double. Dakle, ako su varijable bajt a, c; kratko b; zatim u izrazu a + b * c - 15 L + 1,5F + 1,08 - 10; prvo, prije evaluacije 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 mnogo prije oduzimanja. Nakon toga, budući da je literal 1.5 tipa float , rezultat evaluacije a + b*c - 15L bit će proširen na float prije nego što se doda ovom literalu. Prije izvođenja zbrajanja s brojem 1.08, rezultat prijašnjih izračuna proširit će se na duplo (budući da su stvarne konstante prema zadanim postavkama dvostruke), a na kraju, prije izvođenja posljednjeg zbrajanja, literal 10 (int po zadanim postavkama) bit će proširen udvostručiti . Dakle, rezultat evaluacije izraza bit će tipa double . Automatska proširenja tipa (posebno proširenja od short i byte u int) mogu uzrokovati loše prepoznatljive pogreške u vremenu prevođenja. Na primjer, u izjavama: bajt x = 30 , y = 5 ; x = x + y; vrijednost x i y bit će proširena na int prije nego što se izvrši zbrajanje, a zatim će se pojaviti pogreška kada se pokuša dodijeliti rezultat izračuna int bajt varijabli. Kako bi se to izbjeglo, u drugom operatoru treba koristiti eksplicitnu pretvorbu tipa: x = (bajt) (x + y) ; Izraz x + y mora biti u zagradama jer je prioritet operacije cast u zagradama veći od prioriteta operatora zbrajanja. Usput, ako drugi operator zapišemo kao: x += y; tada neće biti poruke o pogrešci. Veza na prvu

Operatori u jeziku Java su posebni znakovi koji prevoditelju govore da želite izvesti operaciju na nekim operandima. Neki operatori zahtijevaju jedan operand, oni se nazivaju unarno. Neki operatori se postavljaju ispred operanada i pozivaju se prefiks, drugi - poslije, zovu se postfiks operateri. Većina operatora smještena je između dva operanda, takvi se operatori nazivaju infiks binarni operatori. Postoji ternarni operator koji radi s tri operanda.

Java ima 44 ugrađena operatora. Mogu se podijeliti u 4 razreda - aritmetički, bitni, usporedni operatori I mozgalica.

Aritmetički operatori

Aritmetički operatori se koriste za izračune na isti način kao u algebri (pogledajte donju tablicu za sažetak aritmetičkih operatora). Valjani operandi moraju biti numeričkog tipa. Na primjer, ne možete koristiti ove operatore s Booleovim tipovima, ali možete koristiti ove operatore s char, jer je u Javi tip char podskup tipa int.

Operater

Proizlaziti

Operater

Proizlaziti

Dodatak

dodatak sa zadatkom

oduzimanje (također unarni minus)

oduzimanje sa zadavanjem

Množenje

množenje sa zadavanjem

podjela sa zadatkom

modulo

modulo sa zadatkom

Povećanje

dekrement

Četiri aritmetičke operacije

Slijedi jednostavan program koji kao primjer pokazuje upotrebu operatora. Imajte na umu da operatori rade i na cjelobrojnim literalima i na varijablama.

class BasicMath( public static void int a = 1 + 1;

intb = a*3;

main(args niza) (

int c = b / 4;

int d \u003d b - a;

int e = -d;

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);

} }

Kada pokrenete ovaj program, trebali biste dobiti sljedeći rezultat:

C:\>java BasicMath

a = 2

b = 6

c = 1

d=4

e = -4

Modulo operator

Modulo operator, ili mod operator, označen je simbolom %. Ovaj operator vraća ostatak nakon dijeljenja prvog operanda s drugim. Za razliku od C++, Java mod funkcija radi ne samo s cijelim brojevima, već i sa stvarnim tipovima. Program u nastavku ilustrira rad ovog operatora.

classModulus(

javna static void main (Stringargs ) {

int x = 42;

dvostruki y = 42,3;

System.out.println("x mod 10 = " + x % 10);

System.out.println("y mod 10 = " + y % 10);

} }

Kada pokrenete ovaj program, dobit ćete sljedeći rezultat:

C:\>Modul

x mod 10 = 2

y mod 10 = 2.3

Operatori aritmetičkog dodjeljivanja

Za svaki od aritmetičkih operatora postoji oblik u kojem se istovremeno s zadanom operacijom vrši dodjela. Slijedi primjer koji ilustrira upotrebu ove vrste operatora.

klasa OpEquals(

int a = 1;

int b = 2;

int c = 3;

a += 5;

b *= 4;

c += a * b;

s %= 6;

} }

A evo i rezultata dobivenog pokretanjem ovog programa:

C:>Java OpEquals

a = 6

b = 8

c = 3

inkrement i dekrement

Postoje 2 operatora u C-u, koji se nazivaju operatori inkrementa i dekrementa (++ i --), koji su skraćenica za dodavanje ili oduzimanje jednog od operanda. Ovi operatori su jedinstveni po tome što se mogu koristiti u prefiksnom ili postfiksnom obliku. Sljedeći primjer ilustrira upotrebu operatora inkrementa i dekrementa.

klasa IncDec(

javni statički void main(args niza) (

int a = 1;

int b = 2;

int c = ++b;

int d = a++;

c++;

System.out.println("a = " + a);

System.out.println("b = " + b);

System.out.println("c = " + c);

} }

Rezultat pokretanja ovog programa bit će:

C:\java IncDec

a = 2

b = 3

c=4

d=1

Cjelobrojni bitni operatori

Za cjelobrojne numeričke tipove podataka - long, int, short, char i byte definiran je dodatni skup operatora pomoću kojih možete provjeriti i modificirati stanje pojedinih bitova odgovarajućih vrijednosti. Tablica daje sažetak ovih operatora. Bit aritmetički operatori rade sa svakim bitom kao da je nezavisna vrijednost.

Operater

Proizlaziti

Operater

Proizlaziti

bitna unarna negacija (NE)

po bitu I (I)

bitni AND (AND) s dodjelom

bitno ILI (ILI)

bitno OR (OR) s dodjelom

bitovsko isključivo OR (XOR)

bitovsko isključivo OR (XOR) s dodjelom

desni pomak

desni pomak sa zadatkom

pomak udesno s nultim dopunom

desni pomak s nultim punjenjem s dodjelom

pomak ulijevo

pomak ulijevo sa zadatkom

Primjer programa koji manipulira bitovima

Tablica u nastavku pokazuje kako svaki od bitnih aritmetičkih operatora utječe na moguće kombinacije bitova svojih operanada. Primjer koji slijedi u tablici ilustrira upotrebu ovih operatora u Java programu.

klasa Bitlogic(

public static void main(String args) (

Binarni niz = ( "OOOO", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011 ", "1100", "1101",

"1110", "1111" };

int a = 3;//0+2+1 ili binarni 0011

int b = 6;//4+2+0 ili binarno 0110

int c = a | b;

int d = a&b;

int e = a^b;

int f = (~a & b) | (a & ~b);

int g = ~a & 0x0f;

System.out.println(" a = " + binary[a]);

System.out.println(" b = " + binarni[b]);

System.out.println(" ab = " + binarni[c]);

System.out.println(" a&b = " + binary[d]);

System.out.println(" a^b = " + binary[e]);

System.out.println("~a&b|a^~b = " + binary[f]);

System.out.println("~a = " + binarni[g]);

} }

Ispod je rezultat dobiven pokretanjem ovog programa:

C:\>Java BitLogic

a = 0011

b=0110

a | b=0111

a&b=0010

a^b=0101

~a & b | a&~b=0101

~a = 1100

Pomaci lijevo i desno

Operater<< выполняет сдвиг влево всех битов своего левого операнда на число позиций, заданное правым операндом. При этом часть битов в левых разрядах выходит за границы и теряется, а соответствующие правые позиции заполняются нулями. В предыдущей главе уже говорилось об автоматическом повышении типа всего выражения до int в том слу­чае если в выражении присутствуют операнды типа int или целых типов меньшего размера. Если же хотя бы один из операндов в выражении имеет тип long, то и тип всего выражения повышается до long.

Operator >> znači pomak udesno u Javi. Pomiče sve bitove svog lijevog operanda udesno za broj pozicija specificiranih desnim operandom. Kada se bitovi lijevog operanda gurnu iza krajnje desne pozicije riječi, gube se. Prilikom pomicanja udesno, oslobođeni stariji (lijevi) bitovi pomaknutog broja popunjavaju se prethodnim sadržajem predznačkog bita. Ovo ponašanje naziva se proširenje bitova predznaka.

Sljedeći program pretvara vrijednost bajta u niz koji sadrži njegov heksadecimalni prikaz. Imajte na umu da se pomaknuta vrijednost mora maskirati, odnosno logički pomnožiti s vrijednošću 0 x0 f, kako bi se izbrisali bitovi ispunjeni kao rezultat proširenja predznaka i smanjila vrijednost na granice dopuštene prilikom indeksiranja niza heksadecimalnih znamenki .

classHexByte(

char hex = ( "0", "1, "2", "3", "4", "5", "6", "7", "8", "9", "a", "b" , "c", "d", "e", "f );

bajt b = (bajt) 0xf1;

System.out.println(“b = 0x” + hex[(b >> 4) & 0x0f] + hex);

} }

Ispod je izlaz ovog programa:

C:\>java HexByte

b = 0xf1

Nepotpisani desni pomak

Često se zahtijeva da pri pomicanju udesno ne dođe do proširenja predznaka, a slobodni lijevi bitovi se jednostavno popune nulama.

klasa ByteUShift(

statički javni void main(args niza) (

char hex = ( "0", "1', "2", "3", "4", "5", "6", "7", "8", "9", "a", "b ", "c", "d", "e", "f");

bajt b = (bajt) 0xf1;

bajt c = (bajt) (b >> 4);

bajt d = (bajt) (b >> 4);

bajt e = (bajt) ((b & 0xff) >> 4);

System.out.println(" b = 0x" + hex(b >> 4) & 0x0f] + heksadecimalni);

System.out.println(“ b >> 4 =0x" + heksadecimalni[(c >> 4) & 0x0f] + heksadecimalni);

System.out.println("b >>> 4 = 0x" + heksadecimalni[(d >> 4) & 0x0f] + heksadecimalni);

System.out.println(“(b & 0xff) >> 4 = 0x" + heksadecimalni[(e >> 4) & 0x0f] + heksadecimalni);

} }

Za ovaj primjer, varijabla b se može inicijalizirati proizvoljnim negativnim brojem, koristili smo broj s heksadecimalnim prikazom 0xf1. Varijabli c dodjeljuje se rezultat predznačnog pomaka b udesno za 4 bita. Kao što se očekivalo, proširenje bita predznaka uzrokuje da 0xf1 postane 0xff. Tada se rezultat neoznačenog pomaka b udesno za 4 bita unosi u varijablu d. Očekivalo bi se da d sadrži 0x0f, ali u stvarnosti opet dobivamo 0xff. Ovo je rezultat proširenja bita predznaka izvršenog kada je b automatski promaknut u int prije operacije desnog pomaka. Konačno, u izrazu za varijablu e uspijevamo postići željeni rezultat - vrijednost 0x0f. Da bismo to učinili, morali smo logički pomnožiti vrijednost varijable b s maskom 0xff prije pomicanja udesno, čime smo izbrisali bitove visokog reda popunjene tijekom automatske promocije tipa. Imajte na umu da više nema potrebe za korištenjem neoznačenog desnog pomaka, budući da znamo stanje predznačkog bita nakon operacije I.

C:\>java ByteUShift

b = 0xf1

b >> 4 = 0xff

b >>> 4 = 0xff

b & 0xff) >> 4 = 0x0f

Operatori dodjeljivanja po bitu

Baš kao iu slučaju aritmetičkih operatora, svi binarni bitni operatori imaju povezani oblik koji vam omogućuje da automatski dodijelite rezultat operacije lijevom operandu. U sljedeći primjer kreira se nekoliko cjelobrojnih varijabli s kojima se izvode različite operacije pomoću gore navedenih operatora.

klasa OpBitEquals(

javni statički void main(args niza) (

int a = 1;

int b = 2;

int c = 3;

a |= 4;

b >>= 1;

iz<<= 1;

a ^= c;

System.out.println("a = " + a);

System.out.println("b = " + b);

System.out.println("c = " + c);

} }

Rezultati izvođenja programa su sljedeći:

C:\>Java OpBitEquals

a = 3

b = 1

c = 6

Relacijski operateri

Kako bi se mogle usporediti dvije vrijednosti, Java ima skup operatora koji opisuju odnos i jednakost. Popis takvih operatora dat je u tablici.

Operater

Proizlaziti

više ili jednako

manje ili jednako

Vrijednosti bilo koje vrste, uključujući cijele brojeve, realne brojeve, znakove, logičke vrijednosti i reference, mogu se usporediti pomoću operatora == jednakost i nejednakost!=. Imajte na umu da je u Javi, kao iu C i C ++, provjera jednakosti označena nizom (==). Jedan znak (=) je operator dodjeljivanja.

Booleovi logički operatori

Logički logički operatori, sažeti u donjoj tablici, djeluju samo na operandima tipa boolean. Svi binarni logički operatori uzimaju dvije booleove vrijednosti kao operande i vraćaju rezultat istog tipa.

Operater

Proizlaziti

Operater

Proizlaziti

logično I (I)

I (I) s dodjelom

logično ILI (ILI)

ILI (ILI) s dodjelom

logično isključivo OR (XOR)

isključivo OR (XOR) s dodjelom

OR operator za brzu evaluaciju izraza ( kratki spoj ILI)

AND operator za brzu evaluaciju izraza (kratki spoj I)

logička unarna negacija (NE)

ternarni operator if-onda-else

Rezultati djelovanja logičkih operatora na različite kombinacije vrijednosti operanda prikazani su u tablici.

Program u nastavku gotovo u potpunosti ponavlja BitLogic primjer koji već poznajete. Samo, ali ovaj put radimo s booleovim booleovim vrijednostima.

klasa BoolLogic(

javni statički void main(args niza) (

boolean a = istina;

boolean b = lažno;

boolean c = a | b;

boolean d = a&b;

booleane=a^b;

boolean f = (!a & b) | (a & !b);

boolean g = !a;

System.out.println(" a = " + a);

System.out.println(" b = " + b);

System.out.println(" a|b = " + c);

System.out.println(" a&b = " + d);

System.out.println(" a^b = " + e);

System.out.println("!a&b|a&!b = " + f);

System.out.println(" !a = " + g);

} }

C:\>Java BoolLogic

a = istina

b=netočno

a|b = istina

a&b = netočno

a^b = istina

!a&b|a&!b = istina

!a = lažno

Operatori za brzu procjenu booleovski izrazi(logički operatori kratkog spoja)

Postoje dva zanimljiva dodatka skupu logičkih operatora. Ovo su alternativne verzije AND i OR operatora za brzo vrednovanje logičkih izraza. Znate da ako je prvi operand operatora OR istinit, onda je, bez obzira na vrijednost drugog operanda, rezultat operacije istinit. Slično, u slučaju AND operatora, ako je prvi operand lažan, tada vrijednost drugog operanda ne utječe na rezultat – uvijek će biti lažan. Ako koristite && i || umjesto uobičajenih oblika & i |, Java ne procjenjuje desni operand booleovog izraza ako je odgovor jasan iz vrijednosti lijevog operanda. Uobičajena praksa je korištenje && i || u gotovo svim slučajevima, evaluacija booleovih logičkih izraza. Verzije ovih operatora & i | primijeniti samo na bitnu aritmetiku.

Ternarni operator ako-onda-drugo

Opći oblik izjave if-then-use je:

izraz1? izraz2: izraz3

Kao prvi operand - "expression1" - može se koristiti bilo koji izraz čiji je rezultat booleova vrijednost. Ako je rezultat istinit, tada se izvršava naredba koju daje drugi operand, to jest "izraz2". Ako je prvi operand netočan, tada se izvršava treći operand - "izraz3". Drugi i treći operandi, tj. izraz2 i izraz3, moraju vraćati vrijednosti istog tipa i ne smiju biti tipa void.

Program u nastavku koristi ovaj operator za provjeru djelitelja prije izvođenja operacije dijeljenja. U slučaju djelitelja nule, vraća se vrijednost 0.

razred tročlani (

javni statički void main(args niza) (

int a = 42;

int b = 2;

int c = 99;

int d = 0;

int e = (b == 0) ? 0:(a/b);

int f = (d == 0) ? 0: (c/d);

System.out.println("a = " + a);

System.out.println("b = " + b);

System.out.println("c = " + c);

System.out.println("d = " + d);

System.out.println("a / b = " + e);

System.out.println("c / d = " + f);

} }

Ovaj program ne stvara iznimku dijeljenja na nulu i proizvodi sljedeće rezultate:

C:\>java ternarni

a = 42

b = 2

c = 99

d=0

a/b=21

c / d= 0

Prioritet operatera

Java ima specifičan redoslijed ili prioritet operacija. U osnovnoj algebri učili su nas da množenje i dijeljenje imaju veći prioritet od zbrajanja i oduzimanja. U programiranju također morate pratiti prioritete operacija. Tablica navodi, u silaznom redoslijedu, prioritet svih operacija Java jezika.

Prvi red tablice sadrži tri neobična operatora o kojima još nismo raspravljali. Zagrade () se koriste za eksplicitno postavljanje prioriteta. Kao što ste naučili u prethodnom poglavlju, uglaste zagrade se koriste za indeksiranje varijable polja. Operater. (točka) se koristi za odvajanje elemenata od reference objekta - o tome ćemo govoriti u 7. poglavlju. O svim ostalim operaterima već je bilo riječi u ovom poglavlju.

Eksplicitni prioriteti

Budući da je najviši prioritet okrugle zagrade, uvijek možete dodati više parova zagrada u izraz ako sumnjate u redoslijed evaluacije ili samo želite svoj kod učiniti čitljivijim.

a >> b + 3

Koji od dva izraza, a >> (b + 3) ili (a >> b) + 3, odgovara prvom retku? Budući da operator zbrajanja ima veći prioritet od operatora pomaka, točan odgovor je a>> (b + ali). Dakle, ako trebate izvesti operaciju (a>>b )+ 3 zagrade su neizostavne.

Dakle, razmotrili smo sve vrste operatora Java jezika. Sada možete konstruirati bilo koji izraz iz različite vrste podaci. U sljedećem poglavlju naučit ćemo o konstrukcijama grananja, petlji i kako kontrolirati izvršavanje programa.

Logički operatori kratkog spoja && i || namijenjeno za logičke AND (AND) i OR (OR) operacije na izrazima tipa boolean . Imajte na umu da ne postoji skraćeni logički operator za operaciju XOR (isključivo OR).

Logički operatori prečaca slični su operatorima & i |, ali se za razliku od njih koriste samo na booleove izraze i nikada se ne primjenjuju na integralni tipovi. Međutim, && i || imaju izvanredno svojstvo da skraćuju evaluaciju izraza ako se rezultat može zaključiti iz dijela izraza (objasnit ću to primjerima malo kasnije). Zbog ovog svojstva, && i || široko se koristi za rukovanje nultim izrazima. Oni također pomažu povećati učinkovitost cijelog programa.

Svojstvo skraćivanja izravno slijedi iz razlike između &&/|| i &/|: posljednji par operatora mora primiti vrijednosti lijevog i desnog operatora kao ulaz, dok je za prvi par operatora ponekad dovoljno znati vrijednost samo lijevog operanda da bi se vratio vrijednost cijelog izraza. Ovo ponašanje skraćenih logičkih operatora temelji se na dva matematička pravila logička tablica istinitosti:

  • izraz s operatorom AND je netočan ako je vrijednost barem jednog od njegovih operanda lažna;
  • izraz s OR operatorom je istinit ako je barem jedan njegov operand istinit.
Drugim riječima:
  • netočno I X = lažno
  • istina ILI X = istina
To jest, ako je lijevi operand izraza AND lažan, tada je cijeli izraz lažan, bez obzira na vrijednost desnog operanda. Odnosno, s lažnim lijevim operandom, nema potrebe za izračunavanjem vrijednosti desnog operanda. Isti način, ako je lijevi operand izraza ILI istinit, tada su svi izrazi istiniti, bez obzira na vrijednost desnog operanda, koji, dakle, ne trebamo evaluirati.

Razmotrimo primjer koda koji ispisuje poruku String ako niz nije null i ako je duži od 20 znakova:

1. ako ((s != null) && (s.length() > 20)) (
2. System.out.println(s);
3. }

Isti zadatak može se kodirati drugačije:

1. ako (s != null) (
2. ako (s.length() > 20) (
3. System.out.println(s);
4. }
5. }

Ako je string s bio null , onda kada bismo pozvali metodu s.length(), dobili bismo NullPointerException . Međutim, ni u jednom od dva primjera koda ne bi se pojavila takva situacija. Konkretno, u drugom primjeru, s.length() se ne poziva kada je s = null, zahvaljujući skraćenom && operatoru. Ako je test (s!=null) vratio false (false ), to jest, s je nepostojeći niz, tada je zajamčeno da je cijeli izraz lažan. To znači da nema potrebe za izračunavanjem vrijednosti drugog operanda, odnosno izraza (s.length()>20) .

Međutim, ovi operateri imaju nuspojave. Na primjer, ako je desni operand izraz koji izvodi operaciju, onda kada se koriste skraćeni operatori, ova operacija može propasti ako je lijevi operand lažan.

Razmotrimo primjer:
// prvi primjer 1. int val = (int)(2 * Math.random()); 2. boolean test = (val == 0) || (++val == 2); 3. System.out.println("test = " + test + "\nval = " + val); // drugi primjer 1. int val = (int)(2 * Math.random()); 2. boolean test = (val == 0)|(++val == 2); 3. System.out.println("test = " + test + "\nval = " + val);
Prvi primjer će ponekad ispisati nešto poput ovoga:
test = istina
val = 0

A ponekad i ovo:
test = istina
val = 2

Drugi primjer će ponekad ispisati nešto poput ovoga:
test = istina
val = 1

A ponekad i ovo:
test = istina
val = 2

I evo u čemu je stvar. Ako je val 0, tada drugi operand (++val) nikada neće biti evaluiran, tj. val će ostati nula. Ako je u početku val jednako jednom, tada će se kao rezultat ova varijabla povećati i vidjet ćemo val = 2 . U drugom primjeru, korištenjem ne skraćenim operatorima, inkrement se uvijek izvršava i rezultat će uvijek biti 1 ili 2 ovisno o slučajnoj vrijednosti odabranoj u prvom koraku. U oba primjera test je postavljen na true jer je ili val = 0 ili val = 1 i povećava se na 2.

Sumirajmo informacije o stenografskim operatorima && i ||:

  • Primjenjuju se na operande tipa boolean;
  • Oni procjenjuju vrijednost desnog operanda samo ako se rezultat ne može izračunati iz vrijednosti lijevog operanda:
    • netočno I X = lažno
    • istina ILI X = istina

Vrhunski povezani članci