Kako podesiti pametne telefone i računare. Informativni portal

Šta žena muž znači u java. Operatori u Javi

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

  • aritmetički operatori;
  • operatori poređenja;
  • bitni operatori;
  • logički operatori;
  • operatori dodjele;
  • drugi operateri.

Aritmetički operatori

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

Primjer

Sljedeći jednostavan primjer pokazuje programske aritmetičke operatore. 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 poređenja

Postoje sljedeći operatori poređenja podržani u jeziku Java. Pretpostavimo da je varijabla A jednaka 10, a varijabla B jednaka 20. Sljedeća tabela navodi relacijske ili uporedne operatore u Javi:

OperaterOpisPrimjer
== Provjerava jesu li vrijednosti dva operanda jednake ili ne, ako da, tada uvjet postaje istinit(A == B) - nije tačno
!= Provjerava jesu li vrijednosti dva operanda jednake ili ne; ako vrijednosti nisu jednake, tada uvjet postaje istinit(A != B) - vrijednost je istinita
> Provjerava da li je vrijednost lijevog operanda veća od vrijednosti desnog operanda, ako jeste, tada uvjet postaje istinit(A > B) - nije tačno
Provjerava da li je vrijednost lijevog operanda manja od vrijednosti desnog operanda, ako jeste, tada uvjet postaje istinit(A
>= Provjerava da li je vrijednost lijevog operanda veća ili jednaka vrijednosti desnog operanda, ako jeste, tada uvjet postaje istinit(A >= B) - vrijednosti nisu tačne
Provjerava da li je vrijednost lijevog operanda manja ili jednaka vrijednosti desnog operanda, ako jeste, tada uvjet postaje istinit(A

Primjer

Sljedeći jednostavan primjer pokazuje kako programski uporediti operatore poređenja 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 = netačno a != b = tačno a > b = netačno a = a = tačno b

Bitovi operatori

Java definira nekoliko bitnih operatora koji se mogu koristiti za tipove cijelih brojeva: int, long, short, char i byte. U Javi, bitni operator radi na 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 tabela navodi bitne operatore u Javi:

OperaterOpisPrimjer
& (bitno i)Binarni AND operator kopira malo u 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 jednako 0011 1101
^ (bitno logički ili)Binarni XOR operator kopira bit ako je postavljen u jednom operandu, ali ne u oba.(A^B) će dati 49 što je 0011 0001
~ (komplement bita)Binarni komplementarni operator i ima efekat "reflektovanja" bitova.(~A) će dati -61, što je oblik komplementa dvaju od 1100 0011 u binarnoj notaciji
Binarni lijevi operator pomaka. Vrijednost lijevog operanda se pomjera lijevo za broj bitova specificiranih desnim operandom.A
>> (pomak desno)Binarni desni operator pomaka. Vrijednost desnih operanda se pomiče udesno za broj bitova specificiranih od strane lijevog operanda.>> 2 će dati 15 što je 1111
>>> (nulti pomak desno)Operator nulte desne pomake. Vrijednost lijevog operanda se pomiče udesno za broj bitova specificiranih desnim operandom, a pomaknute vrijednosti se popunjavaju nulama.>>> 2 će dati 15 što je 0000 1111

Primjer

Sljedeći jednostavan primjer pokazuje programski bitwise 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 */ System.out.println("a ^ b = " + c); c = ~a; /*-61 = 1100 0011 */ Sistem. 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); ) )

Dobić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 lažna. Sljedeća tabela navodi Bulove 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)); ) )

Ovo će proizvesti sljedeći izlaz:

A && b = lažno a || b = istina !(a && b) = istina

Operatori dodjele

Java jezik podržava sljedeće operatore dodjeljivanja:

Operater Opis Primjer
= Jednostavan operator dodjeljivanja, dodjeljuje vrijednosti s desne strane operanda lijevom operandu C = A + B, dodijelit će vrijednost A + B C
+= Operator dodjeljivanja "Add", on dodjeljuje vrijednost desnog operanda lijevom operandu C += A, ekvivalentno C = C + A
-= Operator dodjeljivanja "Subtraction", oduzima lijevi operand od desnog operanda C -= A, ekvivalentno C = C - A
*= Operator dodjeljivanja "Množenje", on množi desni operand sa lijevim operandom C*=A je ekvivalentno C=C*A
/= Operator dodjeljivanja podjele, dijeli lijevi operand desnim operandom C/=A je ekvivalentno C=C/A
%= Operator dodjeljivanja "Module", on uzima modul sa dva operanda i svoj rezultat dodjeljuje lijevom operandu C %= A, ekvivalentno C = C % A
Operator dodjeljivanja lijevog pomaka C
>>= Operater za dodjelu desnog pomaka C >>= 2, to je kao C = C >> 2
&= Operator dodjeljivanja po bitu (“AND”) C &= 2, to je kao C = C & 2
^= Operator dodjeljivanja XOR po bitu C^=2, to je kao C=C^2
|= Operator dodjeljivanja u bitovima "ILI" 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 ( public static 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); ) )

Dobić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 Java jezik.

Ternarni ili uslovni operator (?:)

Ternarni operater je operator koji se sastoji od tri operanda i koristi se za procjenu logičkih izraza. Ternarni operator u Javi je takođe poznat kao uslovni operator. Ovo. Svrha ternarnog operatora ili uslovni operator je odlučiti koja vrijednost treba biti dodijeljena 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); ) )

Dobiće se sljedeći rezultat:

b vrijednost: 30 b vrijednost: 20

instanceof operator

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

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

Primjeri

Ako varijabla referentnog objekta na lijevoj strani izraza prođe test za klasu/tip sučelja on desna strana, rezultat će biti 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, budući da je tip String boolean rezultat = ime instanceof String; System.out.println(result); ) )

Dobiće se sljedeći rezultat:

Ovaj operator će i dalje vratiti true ako je objekt koji se uspoređuje kompatibilan s tipom na pravu 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(); logički rezultat = instanca automobila; System.out.println(rezultat); ) )

Dobiće se sljedeći rezultat:

Prioritet operatora u Javi

Prioritet operatora određuje grupisanje pojmova u izrazu. Ovo utič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 sabiranja:

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" je dodano "

U tabeli su iskazi najvišeg prioriteta postavljeni na vrh, a nivo prioriteta opada prema dnu tabele. U izrazu, operatori visokog prioriteta u Javi će se evaluirati s lijeva na desno.

Kategorija Operater Asocijativnost
Postfix (). (tačka) S lijeva na desno
Unary ++ - - ! ~ S desna na lijevo
Multiplikativno * / % S lijeva na desno
Dodatak + - S lijeva na desno
Shift >> >>> S lijeva na desno
Relaciona > >= S lijeva na desno
Jednakost == != S lijeva na desno
Bitno "I" & S lijeva na desno
Ekskluzivno ILI (“XOR”) ^ S lijeva na desno
Bitwise OR | S lijeva na desno
Logično "I" && S lijeva na desno
Logično "ILI" ("ILI") || S lijeva na desno
Uslovno ?: S desna na lijevo
Zadatak = += -= *= /= %= >>= S desna na lijevo
Zarez , S lijeva na desno

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

Operatori u Javi

Sljedeći aritmetički operatori su podržani u Javi (Tabela 2.4).

Tabela 2.4. Aritmetički operatori

Dodatak
- Oduzimanje
* Množenje
/ Division
% Obračun stanja
++ Prirast
-- Dekrement
+= Zadatak sa dodatkom
-= Zadatak sa oduzimanjem
*= Zadatak sa množenjem
/= Zadatak sa deljenjem
%= Zadatak sa izračunom ostatka

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

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

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

Primjer svih ovih operatora prikazan je u Listingu 2.9.

Listing 2.9.
Primjer upotrebe aritmetički operatori

primjer klase (
{
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); 6 će biti prikazano
System.out.println(d++); 6 će biti prikazano
System.out.println(e--) ; 10 će biti prikazano
System.out.println (--e) ; 8 će biti prikazano
}
}

Sada pogledajmo bitwise (bitwise) operatore (tabela 2.5).

Tabela 2.5. Bitovi (bitovi) operatori

Opis operatera
- Unarna negacija
& Bitwise AND
| Bitwise OR
^Isključivo po bitu OR
<< Сдвиг битов влево
>> Pomak bitova udesno
>>> Pomicanje bitova udesno popunjavanjem najznačajnijeg bita nulom
&=, | =, ^=, <<=, >>=, >>>= Zadatak sa sličnom operacijom

Koristeći ove operatore, radimo na brojevima u njihovoj binarnoj predstavi. Razmotrite, na primjer, pisanje broja 15 u binarnom obliku. 00001111

Prvi operator, nazvan unarna negacija, pretvara 0 u 1 i 1 u 0. Operator "i" u bitovima daje ukupno 1 ako su oba slična bita brojeva koji se uspoređuju također 1. Ako imaju različitu kombinaciju brojeva, tada će rezultat biti 0. Na primjer:
C = A & B

Recimo da je A = 15 (00001111) i B je 10 (00001010). Broj C u ovom slučaju će biti jednak 10 (00001010). Bitno "ILI" znači sljedeće: ako je barem jedan od bitova jednak 1, tada je i rezultat 1. Bitno isključivi "OR" vraća 1 ako je samo jedan od bitova brojeva koji se porede jednak 1. Sljedeća tri operatora pomjeraju bitove ulijevo za određeni broj cifara, gdje pomicanje bitova ulijevo popunjava prazne pozicije nulama. Primjer korištenja ovih operatora dat je u tabeli. 2.6 i listing 2.10.

Tabela 2.6. Operatori pomaka bita

Listing 2.10.
Primjer korištenja operatora pomaka bita

klasa Primjer
{
javni statički void main (String args)
{
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đe podržava logičke operatore predstavljene u tabeli. 2.7.

Tabela 2.7. Logički operatori

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

Prvih šest operatora nazivaju se operatori poređenja. Oni vam omogućavaju da uporedite brojeve i vratite tačno ili netačno. Sljedeća četiri operatora rade s booleovim podacima, ali su slični u radu sličnim bitnim operatorima (samo trebate zamijeniti bit 0 netačnim, a bit 1 istinitim).

Sljedeća dva operatora se koriste za dva uslova odjednom, tj. specificiraju se dva uslova i između njih se postavlja “uslovni I” operator. Ako su oba tačna, tada se ispisuje true; ako je barem jedan od njih netačan, tada će rezultat biti lažan.

Uslov ili operator će vratiti true ako je barem jedan od uslova istinit. Obično se koriste u naredbi if (o tome ćemo govoriti u sljedećem poglavlju). Primjer upotrebe svih ovih operatora predstavljen je u Listingu 2.11.

Listing 2.11.
Primjer upotrebe logički operatori

klasa Primjer
{
javni statički void main (String args)
{
int a = 10, b=15, c=20;
boolean b1 = a != b;
boolean b2 = c > a;
boolean b3 = b1&b2;
logički b4 = b3 ^ b1;
if (b1 && b4 = = false) // Ako je b1 != b4, onda:
bZ = istina;
else // Ako to nije slučaj, onda:
b2 = lažno;
}
}

Evo dijagrama upotrebe logičkih operatora (tabela 2.8).

Tabela 2.8. Vrijednosti logičkih operatora za dvije varijable

Većina operacija uključena primitivni tipovi se ne izvodi korištenjem metoda, već korištenjem specijalni znakovi, zvao znak operacije.

Operator dodjele

Zadatak varijabla vrijednosti poziva se konstanta, druga varijabla ili izraz (varijable i/ili konstante razdvojene znakovima operatora). operacija dodjele i označen je znakom " = ", na primjer: x = 3 ; y = x; z = x; U Javi je moguće koristiti operator dodjeljivanja više puta u jednom izrazu, na primjer: x1 = x2 = x3 = 0; Ova operacija se izvodi od zdesna na lijevo, 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: unarno(unarni) znakovi operacija sa jednim argumentom i binarni(binarni) sa 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 nad brojem ili izrazom;
  • bitni komplement "~" (samo za cijele brojeve) – invertuje 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 komplementa po bitovima: int a = 15 ; int b; b = ~a; // b = -16 Brojevi a i b su brojevi tipa int, tj. su interno predstavljeni od strane računara kao 32-bitni binarni celi brojevi, dakle binarno predstavljanje brojevi a i b će izgledati ovako: a = 00000000 00000000 00000000 00001111 b = 11111111 11111111 11111111 11110000 Kao što možete vidjeti iz ovog prikaza, jedinice u z bitovima su promijenjene u svim bitovima a u bitovima z a se mijenjaju u nula bitova. Decimalni prikaz b je –16. Znakovi operacije povećanja i smanjenja mogu se postaviti prije ili poslije varijable. Ove opcije su imenovane u skladu s tim prefiks I postfix evidentiranje ovih transakcija. Notacija prefiksa za prijavu operatora vraća vrijednost svog operanda poslije evaluacija izraza. U postfiksnom zapisu, znak operacije kao prvo 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 će biti dodijeljena vrijednost 2 jer će vrijednost x prvo biti povećana za 1, a zatim će rezultat biti dodijeljen varijabli y. Varijabli z će biti dodijeljena vrijednost 1 jer će prvo varijabli z biti dodijeljena vrijednost, a zatim će vrijednost x biti povećana za 1. U oba slučaja, nova vrijednost x će biti 2. Treba napomenuti da se u Javi, za razliku od jezika C, operacije smanjenja i povećanja mogu primijeniti i na stvarne varijable ( float type i duplo). Binarni znakovi operacija se dijele na operacije s numeričkim rezultatom i operacije poređenja čiji je rezultat Boolean 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 drugim, a rezultat će imati isti predznak kao i dividenda), na primjer, rezultat operacije 5%3 će biti jednak 2, a rezultat operacije (-7) %(-4) će biti jednak -3. IN Java operacija može se koristiti i za realne varijable (float ili dupli 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čen) x5 = x% 4 // x5 = 3 (ostatak podjele// 7 po 4)

Bitove operacije

  • Bitne operacije uzimaju u obzir original numeričke vrijednosti kao bitna polja i izvršite sljedeće radnje na njima:
  • postavljanje bit in i Pozicija polja rezultata je 1 ako su oba bita unutra i th pozicije operanada su jednake 1, ili 0 u suprotnom – po bitovima AND ("& ");
  • postavljanje bit in i Pozicija polja rezultata je 1 ako je barem jedan bit i th pozicije operanada su jednake 1, ili 0 u suprotnom – bitsko ILI (" | ");
  • postavljanje bit in i Pozicija polja rezultata je 1 ako su bitovi unutra i-te pozicije operanada nisu jednake jedna drugoj, ili na 0 u suprotnom – bitovsko isključivo OR (" ^ ");
  • pomak ulijevo od bitova polja prvog operanda za broj bitova koji je određen drugim operandom (predznačni bit broja se ne mijenja) - bitski pomak ulijevo uzimajući u obzir znak "<< ";
  • desno pomeranje bitova prvog polja operanda za broj bitova koji je određen drugim operandom (značni bit broja se ne menja) – bitovsko pomeranje udesno, uzimajući u obzir znak " >> ";
  • pomak udesno od bitova polja prvog operanda za broj bitova koji je određen drugim operandom (predznačni bit broja je također pomaknut) - bitski pomak udesno bez uzimanja u obzir " >>> " znak.
Primjeri bitnih operacija:
  1. Bitwise AND

    int x = 112 ; int y = 94; int z; z = x & y; // z=80: 00000000 00000000 00000000 01010000
  2. Bitwise 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. Isključivo po bitu 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 osnovu 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

Kombinovane operacije

U Javi možete koristiti za binarne aritmetičke operacije kombinovano(kompozitni) znakovi operatora: operacija identifikatora = izraz Ovo je ekvivalentno sljedećoj operaciji: identifikator = izraz operacije identifikatora 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 poređenja

Java definira sljedeće operatore poređenja:
  • " == " (jednako), " != " (nije jednako),
  • " > " (veće od), " >= " (veće ili jednako),
  • " < " (меньше) " <= " (меньше или равно)
imaju dva operanda i vraćaju logičku vrijednost koja odgovara rezultatu poređenja ( false ili istinito). Imajte na umu da kada upoređujete dvije veličine za jednakost u Javi, kao u C i C++, simboli " == " (dva uzastopna znaka jednakosti bez razmaka), za razliku od operatora dodjeljivanja, koji koristi simbol " = ". Upotreba simbola " = " prilikom poređenja dvije vrijednosti ili uzrokuje grešku kompilacije ili dovodi do pogrešnog rezultata. Primjeri operacija poređenja: boolean isEqual, isNonEqual, isGreater, isGreaterOrEqual, isLess, isLessOrEqual; 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

Bulove operacije

Bulove operacije se izvode na Booleovim varijablama i njihov rezultat je također vrijednost tipa boolean. Sljedeće Booleove operacije su definirane u Javi:
  • negacija "!" – zamjena false sa istinitim, ili obrnuto;
  • I operacija "&" – rezultat je istinit samo ako su oba operanda tačna, u suprotnom je rezultat lažan;
  • ILI operacija "|" – rezultat je istinit samo ako je barem jedan od operanada tačan, u suprotnom rezultat je lažan.
  • isključiva ILI operacija "^" – rezultat je istinit samo ako operandi nisu jednaki jedan drugom, u suprotnom je rezultat lažan.
Operacije " & ", " | " i " ^ " mogu se, kao i odgovarajuće bitne operacije, koristiti u složenim operacijama dodjeljivanja: " &= ", " |= " i " ^= " Osim toga, operacije " = " su primjenjivi na Booleove operande = " (jednako) i " != " (nije jednako). Kao što možete vidjeti iz definicije OR i AND operatora, OR operacija rezultira rezultatom true kada je prvi operand istinit, bez obzira na vrijednost drugog operanda, a AND operacija rezultira rezultatom false kada je prvi operand operand je netačan, bez obzira na vrijednost drugog operanda. Java definiše još dva Booleova operatora: druge verzije logičkih operatora AND i OR, poznatih kao logički operatori kratkog spoja: short-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 da li je lijevi operand istinit ili netač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 = ! isValid; // isNotValid = false isEqual = isInRange == isValid; // isEqual = false // isNotEqual = true isNotEqual = isInRange != isValid

Uslovni rad

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

Operativni staž

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

Konverzija i livenje pri izvođenju operacija

Operacije dodjeljivanja i aritmetički izrazi mogu koristiti literale, varijable i izraze različitih tipova, na primjer: dvostruko y; bajt x; y = x + 5 ; Ovaj primjer dodaje bajt varijablu x u int literal 5 i dodjeljuje rezultat dvostrukoj varijabli y. U Javi, kao iu jeziku C, konverzije tipova prilikom evaluacije izraza mogu se izvršiti automatski ili korištenjem operatora za pretvaranje tipa. Međutim, pravila za prevođenje tipova se malo razlikuju od pravila jezika C i općenito su strožija nego u jeziku C. Prilikom izvođenja operacije dodjeljivanja, konverzija tipa se događa automatski ako proširenje transformacije(proširujuća konverzija) i dvije vrste su kompatibilne. Transformacije koje se šire su transformacije bajt® kratko® int® dugo® float® duplo. Za proširene konverzije, numerički tipovi, uključujući cijeli broj i pokretni zarez, kompatibilni su jedni s drugima. Međutim, numerički tipovi nisu kompatibilni sa char i booleovim tipovima. Tipovi char i boolean također su međusobno nekompatibilni. Java također izvodi automatsku konverziju tipa kada pohranjuje literalnu integer konstantu (koja je zadana vrijednost int) u varijablu tipa byte, short ili long (međutim, ako literal ima vrijednost izvan raspona važećih vrijednosti za taj tip, izdaje se poruka o grešci: mogući gubitak točnosti). Ako je konverzija sužavajuća konverzija, odnosno izvrši se bajt ¬ kratki ¬ char ¬ int ¬ long ¬ float ¬ dvostruka konverzija, onda takva konverzija može dovesti do gubitka preciznosti broja ili do njegovog izobličenja. Stoga, tokom suženih konverzija, prilikom kompajliranja programa, prikazuje se dijagnostička poruka o nekompatibilnosti tipa i datoteke klasa se ne kreiraju. Ova poruka će se također izdati ako pokušate pretvoriti izraze tipa byte ili short u varijablu tipa char. Ako je i dalje potrebno izvršiti takve konverzije, koristi se operacija cast tipa, koja ima sljedeći format: ( tip-konverzija) značenje, Gdje tip-konverzija određuje tip u koji se dati podaci moraju konvertovati značenje, na primjer, kao rezultat izvršavanja operatora: bajt x = 71 ; char simbol = (char ) x; varijabla simbola će dobiti vrijednost " 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 tip-konverzija , tada će rezultat transformacije biti ostatak dijeljenja vrijednosti sa modulom opsega dodijeljenog tipa (za brojeve tipa bajt, modul opsega će biti jednak 256, skraćeno – 65536, za int – 4294967296 i dugo – 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 char podatke, konverzija u znak se događa ako je originalni broj u rasponu od 0 do 127, u suprotnom se znaku daje vrijednost "?". Prilikom izvođenja aritmetičkih i bitnih konverzija, sve bajt i kratke vrijednosti, kao i char , se proširuju u int , (sa numeričkom vrijednošću koda znakova koji se koristi u proračunima za char ) tada, ako je barem jedan operand tipa long , tip celobrojnog 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 izračunavanja a + b*c, vrijednosti varijabli će se proširiti na int , zatim, pošto je konstanta 15 tipa long, rezultat izračuna će se proširiti na mnogo prije oduzimanja. Nakon toga, pošto je literal 1.5 tipa float, prije dodavanja sa ovim literalom, rezultat procjene a + b*c – 15L će se proširiti na float . Prije obavljanja sabiranja na broju 1.08, rezultat prethodnih izračunavanja će se proširiti na duplo (pošto su realne konstante po defaultu tipa double) i konačno, prije nego što se izvrši posljednji sabiranje, literal 10 (podrazumevani int) će biti proširen na duplo. Dakle, rezultat evaluacije izraza će biti tipa double . Automatske ekstenzije tipa (posebno kratke i ekstenzije od bajta do int) mogu uzrokovati loše prepoznate greške u vremenu kompajliranja. Na primjer, u operatorima: bajt x = 30 , y = 5 ; x = x + y; Varijable x i y će se proširiti na int prije nego što se izvrši sabiranje, a zatim će se pojaviti poruka o grešci kada se pokuša dodijeliti rezultat int varijabli bajta. Da biste to izbjegli, morate koristiti eksplicitnu konverziju tipa u drugom operatoru: x = (bajt) (x + y) ; Izraz x + y mora biti zatvoren u zagradama jer je prioritet operacije pretvaranja tipa zatvorene u zagrade veći od prioriteta operacije sabiranja. Usput, ako napišete drugi operator u obliku: x += y; tada neće biti poruke o grešci. Link do prvog

Operatori u Javi su posebni znakovi koji govore kompajleru da želite da izvršite operaciju na određenim operandima. Neki operatori zahtijevaju jedan operand, oni se nazivaju unarno. Neki operatori se postavljaju ispred operanada i pozivaju se prefiks, drugi - posle, oni se zovu postfix operateri. Većina operatora se postavlja između dva operanda, takvi operatori se nazivaju infix binarni operatori. Postoji ternarni operator koji radi na tri operanda.

Java ima 44 ugrađena operatora. Mogu se podijeliti u 4 klase - aritmetički, bitski, operatori poređenja I mozgalica.

Aritmetički operatori

Aritmetički operatori se koriste za proračune baš kao u algebri (pogledajte tabelu ispod za sažetak aritmetičkih operatora). Važeći operandi moraju biti numeričkog tipa. Na primjer, ne možete koristiti ove operatore za rad s Booleovim tipovima, ali ih možete koristiti za rad sa tipom char, pošto je u Javi tip char podskup tipa int.

Operater

Rezultat

Operater

Rezultat

Dodatak

dodatak sa zadatkom

oduzimanje (također unarni minus)

oduzimanje sa zadatkom

Množenje

množenje sa zadavanjem

podjela sa zadatkom

modulo podjela

modulo podjela sa zadatkom

Povećanje

dekrement

Četiri aritmetičke operacije

Ispod je, kao primjer, jednostavan program koji demonstrira 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 (String args) (

int c = b / 4;

int d = 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);

} }

Nakon pokretanja ovog programa, trebali biste dobiti rezultat u nastavku:

C:\>java BasicMath

a = 2

b = 6

c = 1

d=4

e = -4

Operator po modulu

Operator modulo dijeljenja, ili mod operator, označen je simbolom %. Ovaj operator vraća ostatak kada se prvi operand podijeli s drugim. Za razliku od C++, mod funkcija u Javi radi ne samo s cijelim tipovima, već i sa stvarnim tipovima. Program ispod ilustruje kako ova izjava radi.

klasa Modul (

javna static void main (String args ) {

int x = 42;

dvostruki y = 42,3;

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

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

} }

Pokretanjem ovog programa dobit ćete sljedeće rezultate:

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 dodjela vrši istovremeno sa datom operacijom. Ispod je primjer koji ilustruje upotrebu ove vrste operatora.

klasa OpEquals (

int a = 1;

int b = 2;

int c = 3;

a += 5;

b *= 4;

c += a * b;

sa %= 6;

} }

A evo i rezultata dobivenog pokretanjem ovog programa:

Od:>Java OpEquals

a = 6

b = 8

c = 3

Povećanje i smanjenje

Postoje dva 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 ilustruje upotrebu operatora inkrementa i dekrementa.

klasa IncDec (

public static void main (String args) (

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 izvršavanja ovog programa će biti ovakav:

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 koji se može koristiti za provjeru i modifikaciju stanja pojedinačnih bitova odgovarajućih vrijednosti. Tabela daje sažetak ovih operatora. Bit aritmetički operatori tretiraju svaki bit kao nezavisnu vrijednost.

Operater

Rezultat

Operater

Rezultat

bitna unarna negacija (NE)

bitwise AND

po bitovima I sa dodjelom

OR

bitno OR sa dodjelom

bitovsko isključivo OR (XOR)

bitovsko isključivo OR (XOR) sa dodjelom

pomak udesno

desni pomak sa zadatkom

desni pomak sa nultim dopunom

desna pomak nula ispunjena dodjelom

pomak ulijevo

pomak ulijevo sa zadatkom

Primjer malog programa za manipulaciju bitovima

Tabela ispod pokazuje kako svaki od bitnih aritmetičkih operatora utječe na moguće kombinacije bitova svojih operanada. Primer koji sledi u tabeli ilustruje 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+0ili 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 = " + binary[b]);

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

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

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

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

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

} }

Ispod je rezultat koji se dobija izvršavanjem ovog programa:

Od:\>Java BitLogic

a = 0011

b = 0110

a | b = 0111

a&b = 0010

a^b = 0101

~a&b | a & ~b = 0101

~a = 1100

Mijenja lijevo i desno

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

Operator >> znači pomak udesno u Javi. On pomiče sve bitove svog lijevog operanda udesno za broj pozicija specificiranih desnim operandom. Kada se bitovi lijevog operanda pomaknu kraj krajnje desne pozicije riječi, gube se. Prilikom pomjeranja udesno, ispražnjeni bitovi visokog reda (lijevi) pomaknutog broja popunjavaju se prethodnim sadržajem bita predznaka. Ovo ponašanje se naziva proširenje bita znaka.

Sljedeći program pretvara vrijednost bajta u niz koji sadrži njegov heksadecimalni prikaz. Imajte na umu da pomaknuta vrijednost mora biti maskirana, odnosno logički pomnožena sa vrijednošću 0 x0 f, kako bi se obrisali bitovi popunjeni kao rezultat proširenja predznaka i smanjila vrijednost na granice dozvoljene prilikom indeksiranja niza heksadecimalnih cifara .

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” + heksadecimalni[(b >> 4) & 0x0f] + heksadecimalni);

} }

Ispod je izlaz ovog programa:

C:\>java HexByte

b = 0xf1

Nepotpisani desni pomak

Često je potrebno da prilikom pomicanja udesno ne dođe do proširenja bita predznaka, a oslobođeni lijevi bitovi se jednostavno popune nulama.

klasa ByteUShift(

static public 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 na proizvoljan negativan broj; koristili smo heksadecimalni broj 0xf1. Varijabli c je dodijeljen rezultat predznačnog pomaka b udesno za 4 bita. Kao što se očekivalo, proširenje bita znaka uzrokuje da 0xf1 postane 0xff. Tada varijabla d sadrži rezultat neoznačenog pomaka b udesno za 4 bita. Očekivalo bi se da će rezultat biti 0x0f, ali u stvarnosti opet imamo 0xff. Ovo je rezultat proširenja bita predznaka izvršenog kada se b automatski promoviše 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 sa maskom 0xff prije pomjeranja udesno, čime smo izbrisali bitove visokog reda popunjene tokom 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

Kao i kod aritmetičkih operatora, svi binarni bitni operatori imaju srodnu formu koja omogućava da se rezultat operacije automatski dodijeli lijevom operandu. IN sljedeći primjer Kreira se nekoliko cjelobrojnih varijabli s kojima se izvode različite operacije pomoću gore navedenih operatora.

klasa OpBitEquals (

public static void main (String args) (

int a = 1;

int b = 2;

int c = 3;

a |= 4;

b >>= 1;

With<<= 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

Relacioni operatori

Da bi se uporedile dvije vrijednosti, Java ima skup operatora koji opisuju odnos i jednakost. Spisak takvih operatora je dat u tabeli.

Operater

Rezultat

više ili jednako

manje ili jednako

Vrijednosti bilo kojeg tipa, uključujući cijele brojeve, realne brojeve, znakove, logičke vrijednosti i reference, mogu se porediti pomoću operatora jednakosti == i nejednakosti !=. Imajte na umu da je u jeziku Java, baš kao iu C i C++, testiranje jednakosti označeno nizom (==). Jedan znak (=) je operator dodjeljivanja.

Logički logički operatori

Logički logički operatori, sažeti u tabeli ispod, rade samo na operandima tipa boolean. Svi binarni logički operatori uzimaju dvije logičke vrijednosti kao svoje operande i vraćaju rezultat istog tipa.

Operater

Rezultat

Operater

Rezultat

logično I (I)

I (I) sa zadatkom

logic OR

ILI (ILI) sa zadatkom

logičko isključivo OR (XOR)

ekskluzivno OR (XOR) sa 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 if-onda-else operator

Rezultati efekata logičkih operatora na različite kombinacije vrednosti operanda prikazani su u tabeli.

Program u nastavku gotovo u potpunosti ponavlja BitLogic primjer koji vam je već poznat. Samo, ali ovaj put radimo sa Booleovim logičkim vrijednostima.

klasa BoolLogic(

public static void main (String args) (

boolean a = istina;

boolean b = lažno;

boolean sa = a | b;

boolean d = a&b;

boolean e = a^b;

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

logički 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 = netačno

a|b = istina

a&b = netačno

a^b = istina

!a&b|a&!b = istina

!a = netačno

Operateri za brzu evaluaciju logičke izraze(logički operatori kratkog spoja)

Postoje dva zanimljiva dodatka skupu logičkih operatora. Ovo su alternativne verzije AND i OR operatora za brzu evaluaciju Bulovih izraza. Znate da ako je prvi operand operatora OR tačan, onda će, bez obzira na vrijednost drugog operanda, rezultat operacije biti 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 || operatore umjesto uobičajenih oblika & i |, tada Java ne procjenjuje desni operand Booleovog izraza ako je odgovor jasan iz vrijednosti lijevog operanda. Uobičajena je praksa da se koriste && i || operatori. u skoro svim slučajevima vrednovanja Bulovih logičkih izraza. Verzije ovih operatora su & i | se koriste samo u bitnoj aritmetici.

Ternarni if-onda-else operator

Opšti oblik izjave if-then-use je:

izraz1? izraz2: izraz3

Prvi operand, “expression1”, može biti bilo koji izraz čiji je rezultat logička vrijednost. Ako je rezultat istinit, tada se izvršava operator specificiran drugim operandom, to jest "expression2". Ako je prvi operand netačan, onda se izvršava treći operand - "izraz3". Drugi i treći operandi, odnosno "expression2" i "expression3", moraju vraćati vrijednosti istog tipa i ne smiju biti tipa void.

Program ispod koristi ovaj operator da provjeri djelitelj prije izvođenja operacije dijeljenja. U slučaju djelitelja nule, vraća se vrijednost 0.

klasa trojka (

public static void main (String args) (

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

} }

Kada se ovaj program pokrene, ne dolazi do izuzetka dijeljenja nulom i izlaze se sljedeći rezultati:

Od: \>java Ternary

a = 42

b = 2

c = 99

d = 0

a/b = 21

s / d= 0

Prioriteti operatera

Java ima specifičan redoslijed ili prioritet operacija. U osnovnoj algebri su nas učili da množenje i dijeljenje imaju veći prioritet od sabiranja i oduzimanja. U programiranju morate pratiti i prioritete operacija. Tabela prikazuje prioritete svih operacija Java jezika u opadajućem redoslijedu.

Prvi red tabele prikazuje tri neobična operatora o kojima još nismo govorili. Zagrade () se koriste za eksplicitno postavljanje prioriteta. Kao što ste naučili u prethodnom poglavlju, uglaste zagrade se koriste za indeksiranje varijable niza. Operater. (tač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

Pošto je najviši prioritet okrugle zagrade, uvijek možete dodati nekoliko parova zagrada u izraz ako sumnjate u redoslijed izračunavanja ili samo želite da svoj kod učinite čitljivijim.

a >> b + 3

Koji od dva izraza, a >> (b + 3) ili (a >> b) + 3, odgovara prvom redu? Pošto operator sabiranja ima veći prioritet od operatora pomaka, tačan odgovor je >> (b + A). Dakle, ako trebate izvršiti operaciju (a>>b )+ 3 Ne možete bez zagrada.

Dakle, pogledali smo sve tipove operatora u jeziku Java. Sada možete konstruisati bilo koji izraz With razne vrste podaci. U narednom poglavlju ćemo se upoznati sa strukturama grananja, organizacijom petlji i naučiti kako da kontrolišemo izvršavanje programa.

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

Skraćeni logički operatori slični su operatorima & i |, ali se koriste drugačije samo na izraze tipa boolean i nikada se ne primjenjuju na integralni tipovi. Međutim, && i || imaju izvanredno svojstvo: skraćuju evaluaciju izraza ako se rezultat može zaključiti iz dijela izraza (objasnit ću to primjerima malo kasnije). Zbog ovog svojstva, && i || operatori široko se koristi za rukovanje nultim izrazima. Oni takođe pomažu u povećanju efikasnosti ukupnog programa.

Svojstvo skraćivanja proizlazi direktno iz razlika između &&/|| i &/|: Posljednji par operatora mora uzeti vrijednosti lijevog i desnog operatora kao ulaz, dok je za prvi par operatora ponekad dovoljno znati vrijednost samo lijevog operanda da bi se vratila vrijednost ceo izraz. Ovo ponašanje skraćenih logičkih operatora zasniva se na dva matematička pravila tabela logičke istine:

  • izraz sa AND operatorom je netačan ako je vrijednost barem jednog od njegovih operanda lažna;
  • Izraz s operatorom OR je istinit ako je barem jedan od njegovih operanda tačan.
Drugim riječima:
  • netačno I X = netačno
  • istina ILI X = istina
To jest, ako je lijevi operand izraza I netačan, onda je cijeli izraz lažan, bez obzira na vrijednost desnog operanda. To jest, ako je lijevi operand lažan, nema potrebe za izračunavanjem vrijednosti desnog operanda. Isti put, ako je lijevi operand ILI izraza istinit, tada je cijeli izraz istinit, bez obzira na vrijednost desnog operanda, koji stoga ne trebamo procjenjivati.

Pogledajmo neki primjer koda koji ispisuje string poruku ako string nije null i ima više od 20 znakova:

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

Isti zadatak se može kodirati drugačije:

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

Ako je string s null, tada bismo dobili NullPointerException prilikom pozivanja metode s.length(). Međutim, ni u jednom od dva primjera koda ne dolazi do ove situacije. Konkretno, u drugom primjeru, s.length() se ne poziva kada je s = null zbog upotrebe skraćenog && operatora. Ako je test (s!=null) vratio false (false), to jest, s je nepostojeći string, onda je zagarantovano 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 neku operaciju, onda kada se koriste skraćeni operatori, ova operacija može propasti ako je lijevi operand lažan.

Pogledajmo primjer:
// prvi primjer 1. int val = (int)(2 * Math.random()); 2. logički 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 ovo:
test = istina
val = 0

A ponekad i ovo:
test = istina
val = 2

Drugi primjer će ponekad ispisati ovo:
test = istina
val = 1

A ponekad i ovo:
test = istina
val = 2

Evo u čemu je stvar. Ako je val 0, onda drugi operand (++val) nikada neće biti evaluiran, što znači da će val ostati jednaka nuli. Ako je početno val jednako jedan, tada će se kao rezultat ova varijabla povećati i vidjet ćemo val = 2. U drugom primjeru, kada se koristi Ne skraćenih operatora, inkrement se uvijek izvodi i rezultat će uvijek biti ili 1 ili 2 u zavisnosti od nasumične vrijednosti odabrane u prvom koraku. U oba primjera, varijabla test procjenjuje se na istinito jer je ili val = 0 ili val = 1 i povećava se na vrijednost 2.

Hajde da sumiramo informacije o skraćenim && i || operatorima:

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

Najbolji članci na ovu temu