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

Çfarë do të thotë gruaja burrë në java. Operatorët në Java

Java ofron një grup të pasur operatorësh për manipulimin e variablave. Të gjithë operatorët Java mund të ndahen në grupet e mëposhtme:

  • operatorët aritmetikë;
  • operatorët e krahasimit;
  • operatorët bitwise;
  • operatorët logjik;
  • operatorët e caktimit;
  • operatorë të tjerë.

Operatorët aritmetikë

Operatorët aritmetikë- përdorur në shprehjet matematikore në të njëjtën mënyrë ato përdoren në algjebër. Supozoni se ndryshorja me numër të plotë A është 10 dhe ndryshorja B është 20. Tabela e mëposhtme liston operatorët aritmetikë në Java:

Shembull

Shembulli i mëposhtëm i thjeshtë tregon operatorët aritmetikë programatikisht. Kopjoni dhe ngjisni kodin e mëposhtëm java në skedarin test.java, përpiloni dhe ekzekutoni këtë program:

Testi i klasës publike (kryesor publik statik i zbrazët (args me vargje) (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--)); // Kontrollo ndryshimin në d ++ dhe ++ 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

Operatorët e Krahasimit

Operatorët e mëposhtëm krahasues mbështeten në gjuhën Java. Supozoni se ndryshorja A është 10 dhe ndryshorja B është 20. Tabela e mëposhtme liston operatorët relacionalë ose krahasues në Java:

OperatoriPërshkrimShembull
== Kontrollon nëse vlerat e dy operandëve janë të barabarta apo jo, nëse po, atëherë kushti bëhet i vërtetë(A == B) - jo e saktë
!= Kontrollon nëse vlerat e dy operandëve janë të barabarta apo jo, nëse vlerat nuk janë të barabarta, atëherë kushti bëhet i vërtetë(A! = B) - vlera është e vërtetë
> Kontrollon nëse vlera e operandit të majtë është më e madhe se vlera e operandit të djathtë, nëse po, atëherë kushti bëhet i vërtetë(A> B) - jo e vërtetë
Kontrollon nëse vlera e operandit të majtë është më e vogël se vlera e operandit të djathtë, nëse po, atëherë kushti bëhet i vërtetë(A
>= Kontrollon nëse vlera e operandit të majtë është më e madhe ose e barabartë me vlerën e operandit të djathtë, nëse po, atëherë kushti bëhet i vërtetë(A> = B) - vlerat nuk janë të sakta
Kontrollon nëse vlera e operandit të majtë është më e vogël ose e barabartë me vlerën e operandit të djathtë, nëse po, atëherë kushti bëhet i vërtetë(A

Shembull

Shembulli i mëposhtëm i thjeshtë tregon programatikisht operatorët e krahasimit në Java. Kopjoni dhe ngjisni kodin e mëposhtëm java në skedarin test.java, përpiloni dhe ekzekutoni këtë program:

Testi i klasës publike (kryesor publik statik i zbrazët (argët e vargut) (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 = e gabuar a! = B = e vërtetë a> b = e gabuar a = a = e vërtetë b

Operatorët bitwise

Java përcakton disa operatorë bitwise që mund të aplikohen në llojet e numrave të plotë: int, long, short, char dhe byte. Në Java, operatori bitwise punon në bit dhe kryen operacionin pak nga pak. Supozoni nëse a = 60; dhe b = 13; atëherë në binare ato do të jenë si më poshtë:

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

Supozoni se ndryshorja e numrit të plotë A është 60 dhe ndryshorja B është 13. Tabela e mëposhtme liston operatorët bitwise në Java:

OperatoriPërshkrimShembull
& (në mënyrë bit dhe)Operatori binar AND kopjon pak në rezultat nëse ai ekziston në të dy operandët.(A & B) do të japin 12 që është 0000 1100
| (pak ose)Operatori binar OR kopjon pak nëse ekziston në ndonjë prej operandëve.(A | B) do të japë 61 që është 0011 1101
^ (bitisht boolean ose)Operatori binar XOR kopjon pak nëse vendoset në një operand, por jo në të dy.(A ^ B) do të japë 49 që është 0011 0001
~ (komplement paksa)Operatori i komplementit Binar dhe ka efektin e "rrokullisjes" së biteve.(~ A) do të japë -61, që është forma plotësuese e 1100 0011 në shënimin binar
Operatori binar i zhvendosjes majtas. Vlera e operandëve të majtë zhvendoset majtas nga numri i biteve të specifikuar nga operandi i djathtë.A
>> (zhvendosja djathtas)Operatori binar i zhvendosjes djathtas. Vlera e operandëve të djathtë zhvendoset djathtas nga numri i biteve të specifikuara nga operandi i majtë.Një >> 2 do të japë 15 që është 1111
>>> (zero zhvendosje djathtas)Operatori zero i ndërrimit djathtas. Vlera e operandëve të majtë zhvendoset djathtas nga numri i biteve të specifikuara nga operandi i djathtë dhe vlerat e zhvendosura mbushen me zero.Një >>> 2 do të japë 15 që është 0000 1111

Shembull

Shembulli i mëposhtëm i thjeshtë tregon operatorët programatikisht bit në Java. Kopjoni dhe ngjisni kodin e mëposhtëm java në skedarin test.java, përpiloni dhe ekzekutoni këtë program:

Testi i klasës publike (kryesor publik statik i zbrazët (args varg) (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 * / Sistemi. 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);))

Do të merrni daljen e mëposhtme:

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

Operatorët logjikë

Supozoni se ndryshorja boolean A është e vërtetë dhe ndryshorja B është e gabuar. Tabela e mëposhtme liston operatorët logjikë në Java:

Shembull

Testi i klasës publike (kryesor publik statik i zbrazët (args vargje) (boolean a = e vërtetë; boolean b = false; System.out.println ("a && b = + (a && b)); System.out.println (" a | | b = "+ (a || b)); System.out.println ("! (a && b) = "+! (a && b));))

Kjo do të prodhojë daljen e mëposhtme:

A && b = e gabuar a || b = e vërtetë!(a && b) = e vërtetë

Operatorët e caktimit

Operatorët e mëposhtëm të caktimit mbështeten nga gjuha Java:

Operatori Përshkrim Shembull
= Operatori i thjeshtë i caktimit, cakton vlera nga ana e djathtë e operandëve në anën e majtë C = A + B, do të caktojë vlerën e A + B në C
+= Operatori i caktimit "Append", ai i cakton operandit të majtë vlerat e djathtas C + = A, ekuivalente me C = C + A
-= Operatori i caktimit "Zbritja", ai zbret operandin e majtë nga operandi i djathtë C - = A, ekuivalente me C = C - A
*= Operatori i caktimit "Shumëzimi", ai shumëzon operandin e djathtë me operandin e majtë C * = A është e barabartë me C = C * A
/= Operatori i caktimit "Division", ai ndan operandin e majtë me operandin e djathtë C / = A është e barabartë me C = C / A
%= Operatori i caktimit "Module", merr një modul duke përdorur dy operandë dhe ia cakton rezultatin operandit të majtë. C% = A, ekuivalente me C = C% A
Operatori i caktimit të turnit majtas C
>>= Operatori i caktimit të zhvendosjes djathtas C >> = 2, është si C = C >> 2
&= Operatori i caktimit "AND" në bit C & = 2, është si C = C & 2
^= Operatori i caktimit ekskluziv në bit "OR" ("XOR") C ^ = 2, është si C = C ^ 2
|= Operatori i caktimit në bit OR (OR). C | = 2, është si C = C | 2

Shembull

Shembulli i mëposhtëm i thjeshtë tregon operatorët programatikisht logjikë në Java. Kopjoni dhe ngjisni kodin e mëposhtëm java në skedarin test.java, përpiloni dhe ekzekutoni këtë program:

Test i klasës publike (kryesor publik statik i zbrazët (args me vargje) (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);))

Do të merrni daljen e mëposhtme:

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

Operatorë të tjerë

Ka disa operatorë të tjerë të mbështetur nga gjuha Java.

Operator tresh ose operator i kushtëzuar (? :)

Operator tresh- një operator që përbëhet nga tre operandë dhe përdoret për të vlerësuar shprehjet e tipit boolean. Operatori tresh në Java njihet edhe si operator i kushtëzuar. Kjo. Synimi i operatorit tresh ose operator i kushtëzuarështë të vendosësh se çfarë vlere duhet t'i caktohet variablit. Operatori shkruhet si:

Ndryshorja x = (shprehje)? nëse është e vërtetë: nëse është e rreme

Shembull

Më poshtë është një shembull:

Testi i klasës publike (klasa publike statike e zbrazët kryesore (args vargje) (int a, b; a = 10; b = (a == 1)? 20: 30; System.out.println ("Vlera b:" + b); b = (a == 10)? 20:30; System.out.println ("Vlera b:" + b);))

Do të merrni daljen e mëposhtme:

Vlera B: 30 b vlera: 20

Shembulli i operatorit

Shembulli i operatorit- kontrollon nëse objekti është të një lloji të caktuar(lloji i klasës ose lloji i ndërfaqes) dhe përdoret vetëm për variablat e objektit të referuar. Shembulli i operatorit shkruhet si:

(Ndryshorja e objektit të referencës) shembulli i (klasa / lloji i ndërfaqes)

Shembuj të

Nëse ndryshorja e objektit të referuar në anën e majtë të deklaratës kalon kontrollin për llojin e klasës / ndërfaqes nga anën e djathtë, rezultati është i vërtetë. Më poshtë është një shembull dhe përshkrim i shembullit të operatorit:

Testi i klasës publike (kryesor publik statik i zbrazët (args i vargut) (Emri i vargut = "Oleg"; // Më poshtë do të kthehet e vërtetë sepse lloji është rezultati boolean i vargut = shembulli i emrit të vargut; System.out.println (rezultati);))

Do të merrni daljen e mëposhtme:

Ky operator do të kthehet përsëri i vërtetë nëse objekti që krahasohet është i përputhshëm me tipin për të drejtën e caktimit. Një shembull tjetër vijon:

Klasa e automjetit () e klasës publike Makina zgjeron automjetin (kryesor publik statik i zbrazët (args varg) (Vehicle a = Makinë e re (); rezultati boolean = një shembull i makinës; System.out.println (rezultat);))

Do të merrni daljen e mëposhtme:

Përparësia e operatorit në Java

Përparësia e operatorit përcakton grupimin e termave në një shprehje. Kjo ndikon në mënyrën se si vlerësohet shprehja. Disa operatorë kanë prioritet më të lartë se të tjerët; për shembull operatori i shumëzimit ka përparësi më të lartë se operatori i mbledhjes:

Për shembull, x = 7 + 3 * 2. Këtu x i caktohet vlera 13, jo 20, sepse operatori "*" ka një përparësi më të lartë se "+", kështu që së pari shumëzohet "3 * 2" dhe më pas "7 "shtohet".

Në tabelë, operatorët me përparësinë më të lartë vendosen në krye dhe niveli i përparësisë ulet drejt fundit të tabelës. Në një shprehje, operatorët me përparësi të lartë në Java do të vlerësohen nga e majta në të djathtë.

Kategoria Operatori Asociativiteti
Postfiks (). (pika) Nga e majta në të djathtë
Unar ++ - - ! ~ Nga e djathta në të majtë
Shumëzues * / % Nga e majta në të djathtë
Shtues + - Nga e majta në të djathtë
Zhvendosja >> >>> Nga e majta në të djathtë
Relacionale > >= Nga e majta në të djathtë
Barazia == != Nga e majta në të djathtë
Bitwise "AND" & Nga e majta në të djathtë
Ekskluzive bitwise "OR" ("XOR") ^ Nga e majta në të djathtë
Në bit "OR" ("OR") | Nga e majta në të djathtë
"DHE" logjike && Nga e majta në të djathtë
Logjike "OR" ("OR") || Nga e majta në të djathtë
E kushtëzuar ?: Nga e djathta në të majtë
Detyra = += -= *= /= %= >>= Nga e djathta në të majtë
presje , Nga e majta në të djathtë

Në mësimin tjetër, do të flasim për kontrollin e lakut në programimin Java. Ky mësim do të përshkruajë llojet e ndryshme të sytheve, si mund të përdoren unazat në zhvillimin e softuerit dhe për çfarë qëllimesh përdoren ato.

Operatorët në Java

Operatorët e mëposhtëm aritmetikë mbështeten në Java (Tabela 2.4).

Tabela 2.4. Operatorët aritmetikë

Shtimi
- Zbritja
* Shumëzimi
/ Divizioni
% Llogaritja e mbetjes
++ Rritje
- Zvogëlimi
+ = Detyrë me mbledhje
- = Zbritja e detyrës
* = Detyrë me shumëzim
/ = Detyrë me pjesëtim
% = Detyrë me llogaritjen e mbetjes

Pesë operatorët e parë janë të njohur për të gjithë nga kursi shkollor matematikë, me dy të ashtuquajtur operatorë unarë, dhe mund të përdoret për të treguar shenjën e një numri të caktuar. Kjo pasohet nga operatorët e quajtur increment (++) dhe zvogëlim (- -).
Njëri prej tyre (rritja) shton vlerën njësi e ndryshueshme, tjetri (zvogëlimi), përkundrazi, zbret njërën.

Këta operatorë tregohen pa një hapësirë ​​pranë vlerës së ndryshores. Nëse ato janë në të majtë të ndryshores, atëherë kjo quhet forma e parashtesës së një rritjeje ose zvogëlimi, dhe kjo do të thotë që së pari i shtohet (ose i zbritet) një njësi ndryshores dhe më pas përdoret në shprehjen. . Nëse rritja (ose zvogëlimi) vendoset pas emrit të ndryshores, atëherë kjo quhet forma postfiks, dhe kjo do të thotë se variabli fillimisht përdoret në shprehje, dhe më pas një i shtohet (ose i zbritet) njërës.

Pesë operatorët e tjerë përdoren si më poshtë:
a + = b
ngjashëm me shkrimin:
a = a + b

Një shembull i përdorimit të të gjithë këtyre operatorëve është paraqitur në Listimin 2.9.

Listimi 2.9.
Shembull përdorimi operatorët aritmetikë

Shembull i klasës (
{
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); Do të shfaqë 6
System.out.println (d ++); Do të shfaqë 6
System.out.println (e--); Do të shfaqë 10
System.out.println (--e); Prodhimi 8
}
}

Tani merrni parasysh operatorët bitwise (bitwise) (Tabela 2.5).

Tabela 2.5. Operatorë bitwise (bitwise).

Përshkrimi i operatorit
- Negacion unar
& Bitwise DHE
| Në mënyrë bitale OSE
^ Ekskluzive bitwise OSE
<< Сдвиг битов влево
>> Zhvendosni bitet djathtas
>>> Zhvendosni bitet djathtas, duke mbushur bitin më domethënës me zero
&=, | =, ^=, <<=, >> =, >>> = Detyrë me të njëjtin operacion

Me ndihmën e këtyre operatorëve, ne punojmë me numrat në paraqitjen e tyre binar. Konsideroni, për shembull, të shkruani numrin 15 në binar. 00001111

Operatori i parë, i quajtur mohim unar, konverton 0 në 1 dhe 1 në 0. Operatori në bit "dhe" përfundon si një nëse të dy bitët e ngjashëm të numrave të krahasuar kanë gjithashtu 1. Nëse ata kanë një kombinim të ndryshëm numrash, totali do të jetë 0. Për shembull:
C = A & B

Supozoni se A = 15 (00001111) dhe B është 10 (00001010). Numri C në këtë rast do të jetë i barabartë me 10 (00001010). Bitwise "OR" do të thotë si vijon: nëse të paktën një nga bitët është 1, atëherë totali është gjithashtu 1. "OR" ekskluzive në bit kthen 1 nëse vetëm një nga bitet e numrave të krahasuar është i barabartë me 1. Tre të ardhshëm operatorët i zhvendosin bitet majtas me numrin e caktuar të shifrave, për më tepër, zhvendosja e biteve në të majtë i mbush me zero pozicionet boshe. Një shembull i përdorimit të këtyre operatorëve është paraqitur në tabelë. 2.6 dhe Listimi 2.10.

Tabela 2.6. Operatorët e zhvendosjes së bitave

Listimi 2.10.
Një shembull i përdorimit të operatorëve të zhvendosjes së bitit

Shembull i klasës
{
Kryesor publik statik i zbrazët (args me vargje)
{
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);
}
}

Operatorët Boolean mbështeten gjithashtu në Java, siç tregohet në tabelë. 2.7.

Tabela 2.7. Operatorët logjikë

Përshkrimi i operatorit
= = E barabartë
! = Jo i barabartë
< Меньше
< = Меньше или равно
> Më shumë
> = Më e madhe ose e barabartë
& Logjike dhe
| Boolean ose
^ Ekskluzive logjike ose
! Negacion
&& Kushtëzuar dhe
| | E kushtëzuar ose
& =, | =, ^ = Detyrë me të njëjtin operator

Gjashtë operatorët e parë quhen operatorë krahasimi. Ato ju lejojnë të krahasoni numrat dhe të ktheni ose të vërtetë ose të gabuar. Katër operatorët e ardhshëm punojnë me të dhëna të tipit boolean, por ata janë të ngjashëm në punë me operatorët bit të ngjashëm (vetëm ju duhet të zëvendësoni bitin 0 me false dhe bitin 1 me true).

Dy operatorët e ardhshëm përdoren për dy kushte njëherësh, d.m.th. specifikohen dy kushte dhe ndërmjet tyre vendoset operatori "I kushtëzuar DHE". Nëse të dyja janë të vërteta, atëherë e vërteta është prodhimi; nëse të paktën njëri prej tyre është i rremë, atëherë totali do të jetë i rremë.

Operatori "i kushtëzuar ose" do të kthehet i vërtetë nëse të paktën një nga kushtet është e vërtetë. Ato përdoren zakonisht në deklaratat if (ne do të flasim për këtë në kapitullin tjetër). Një shembull i përdorimit të të gjithë këtyre operatorëve është paraqitur në Listën 2.11.

Listimi 2.11.
Shembull përdorimi operatorët logjikë

Shembull i klasës
{
Kryesor publik statik i zbrazët (args me vargje)
{
int a = 10, b = 15, c = 20;
boolean b1 = a! = b;
boolean b2 = c> a;
boolean b3 = b1 & b2;
boolean b4 = b3 ^ b1;
nëse (b1 && b4 = = e gabuar) // Nëse b1! = b4, atëherë:
bЗ = e vërtetë;
tjetër // Nëse jo, atëherë:
b2 = false;
}
}

Këtu është një diagram i përdorimit të operatorëve logjikë (Tabela 2.8).

Tabela 2.8. Vlerat logjike të operatorit për dy ndryshore

Shumica e operacioneve në lloje primitive bëhet jo me metoda, por me personazhe të veçanta thirrur shenjë operimi.

Operacioni i caktimit

Detyra vlerë e ndryshueshme konstante, quhet një variabël ose shprehje tjetër (variabla dhe/ose konstante të ndara nga shenjat e funksionimit). operacioni i caktimit dhe tregohet me shenjën " = ", për shembull: x = 3; y = x; z = x; Në Java, është e mundur të ripërdoret operacioni i caktimit në një shprehje, për shembull: x1 = x2 = x3 = 0; Ky operacion kryhet nga e djathta në majtas, pra variablit x3 fillimisht i caktohet vlera 0, më pas ndryshores x2 i caktohet vlera e ndryshores x3 (0), dhe në fund ndryshores x1 i caktohet vlera e ndryshores x2 (0). shenjat e operacioneve, argumentet e të cilave janë numra, ndahen në dy kategori: unare shenja (unare) për operacione me një argument dhe binare(binare) me dy argumente.

Operacione unare

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

Operacionet aritmetike binare

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

Operacionet bitwise

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

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

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

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

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

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

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

Operacione të kombinuara

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

Operacionet e krahasimit

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

Operacionet Boolean

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

Operacioni i kushtëzuar

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

Vjetërsia e operacioneve

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

Konvertimi i llojit dhe derdhja gjatë kryerjes së operacioneve

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

Operatorët në Java janë karaktere speciale që i tregojnë përkthyesit se dëshironi të kryeni një operacion në disa operandë. Disa operatorë kërkojnë një operand, ata quhen unare. Disa operatorë vendosen para operandëve dhe thirren prefiksi, të tjerat - pas, quhen postfiks operatorët. Shumica e operatorëve vendosen midis dy operandëve, operatorë të tillë quhen fiks operatorët binare. Ekziston një operator tresh që punon me tre operandë.

Java ka 44 operatorë të integruar. Ato mund të ndahen në 4 klasa - aritmetikë, bitwise, operatorët e krahasimit dhe ngacmues truri.

Operatorët aritmetikë

Operatorët aritmetikë përdoren për llogaritjet në të njëjtën mënyrë si në algjebër (shih tabelën për një përmbledhje të operatorëve aritmetikë më poshtë). Operatorët e vlefshëm duhet të jenë të llojeve numerike. Për shembull, ju nuk mund t'i përdorni këta operatorë për të punuar me tipet Boolean, por mund t'i përdorni këta operatorë për të punuar me llojin char, sepse në Java, lloji char është një nëngrup i llojit int.

Operatori

Rezultati

Operatori

Rezultati

Shtimi

detyrë shtesë

zbritja (gjithashtu unary minus)

caktimi i zbritjes

Shumëzimi

caktimi i shumëzimit

ndarja me detyrë

ndarje modulore

detyrë modul

Rritje

pakësim

Katër veprime aritmetike

Më poshtë, si shembull, është një program i thjeshtë që demonstron përdorimin e operatorëve. Vini re se operatorët punojnë në literale me numra të plotë dhe në ndryshore.

klasa BasicMath (zbrazëti statike publike int a = 1 + 1;

intb = a * 3;

kryesore (args me vargje) (

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

} }

Duke ekzekutuar këtë program, duhet të merrni daljen e mëposhtme:

C: \> java BasicMath

a = 2

b = 6

c = 1

d = 4

e = -4

Operatori i modulit

Operatori modul, ose operatori mod, shënohet me simbolin %. Ky operator kthen pjesën e mbetur të pjesëtimit të operandit të parë me të dytin. Ndryshe nga C ++, funksioni mod në Java funksionon jo vetëm me numra të plotë, por edhe me lloje reale. Programi më poshtë ilustron se si funksionon ky operator.

moduli i klasës (

zbrazëti publike statike kryesore (Args me varg ) {

int x = 42;

dyfishi y = 42,3;

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

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

} }

Duke ekzekutuar këtë program, do të merrni daljen e mëposhtme:

C: \> Moduli

x mod 10 = 2

y mod 10 = 2.3

Operatorët e caktimit aritmetik

Për secilin prej operatorëve aritmetikë ekziston një formë në të cilën një detyrë kryhet njëkohësisht me një veprim të caktuar. Më poshtë është një shembull që ilustron përdorimin e këtij lloji të operatorit.

klasa OpEquals (

int a = 1;

int b = 2;

int c = 3;

a + = 5;

b * = 4;

c + = a * b;

me% = 6;

} }

Dhe këtu është rezultati i marrë gjatë ekzekutimit të këtij programi:

C:> Java OpEquals

a = 6

b = 8

c = 3

Rritje dhe zvogëlim

Ekzistojnë 2 operatorë në C të quajtur operatorë increment dhe zvogëlues (++ dhe -), të cilët janë stenografi për të shtuar ose zbritur një nga një operand. Këta operatorë janë unik në atë që mund të përdoren si në formë parashtese ashtu edhe në formë postfikse. Shembulli i mëposhtëm ilustron përdorimin e operatorëve të rritjes dhe zvogëlimit.

klasa IncDec (

kryesore e zbrazët statike publike (args me vargje) (

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

} }

Rezultati i ekzekutimit të këtij programi do të jetë si më poshtë:

C: \ java IncDec

a = 2

b = 3

c = 4

d = 1

Operatorët e plotë bit

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

Operatori

Rezultati

Operatori

Rezultati

mohim unar bitwise (JO)

pjesërisht DHE

bitwise AND (AND) me caktim

pjesërisht OSE (OR)

bit OR (OR) me caktim

OR ekskluzive bitwise (XOR)

bitwise ekskluzive OR (XOR) me caktim

zhvendosja në të djathtë

zhvendosje djathtas me detyrë

zhvendosja djathtas i mbushur me zero

zhvendosja djathtas e mbushur me zero me caktim

Zhvendosje majtas

turn majtas me detyrë

Një shembull i një programi që manipulon bit

Tabela më poshtë tregon se si secili prej operatorëve aritmetikë bit ndikon në kombinimet e mundshme të biteve të operandëve të tyre. Shembulli që vijon në tabelë ilustron përdorimin e këtyre operatorëve në një program Java.

klasa Bitlogjike (

kryesore e zbrazët statike publike (args me vargje) (

Binar i vargjeve = ("OOOO", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011 "," 1100 "," 1101 ",

"1110", "1111" };

int a = 3; // 0 + 2 + 1 ose binar 0011

int b = 6; // 4 + 2 + 0 ose binar 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 =" + binar [a]);

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

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

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

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

System.out.рrintln ("~ a & b | a ^ ~ b =" + binar [f]);

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

} }

Më poshtë është rezultati nga ky program:

C: \> Java BitLogic

a = 0011

b = 0110

a | b = 0111

a & b = 0010

a ^ b = 0101

~ a & b | a & ~ b = 0101

~ a = 1100

Zhvendos majtas dhe djathtas

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

Operatori >> do të thotë zhvendosje djathtas në Java. Ai i lëviz të gjitha pjesët e operandit të majtë djathtas sipas numrit të pozicioneve të përcaktuara nga operandi i djathtë.Kur bitët e operandit të majtë kalojnë pozicionin më të djathtë të fjalës, ato humbasin. Kur zhvendoset djathtas, shifrat e liruara të larta (majtas) të numrit të zhvendosur plotësohen me përmbajtjen e mëparshme të shifrës së nënshkruar. Kjo sjellje quhet zgjerim i shenjës.

Programi i mëposhtëm konverton një vlerë bajt në një varg që përmban paraqitjen e tij heksadecimal. Ju lutemi vini re se vlera e zhvendosur duhet të maskohet, domethënë duhet të shumëzohet logjikisht me vlerën 0 x0 f, në mënyrë që të pastrohen bitet e mbushura si rezultat i zgjerimit të shenjës dhe të ulet vlera në kufijtë e lejuar gjatë indeksimit të një grup i shifrave heksadecimal.

classHexByte (

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

byte b = (byte) 0xf1;

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

} }

Më poshtë është prodhimi i këtij programi:

C: \> java HexByte

b = 0xf1

Zhvendosje e panënshkruar djathtas

Shpesh kërkohet që kur zhvendoset djathtas, biti i shenjës të mos zgjerohet, dhe shifrat e lira të majta thjesht të mbushen me zero.

klasa ByteUSshift (

kryesore e zbrazët publike statike (args me vargje) (

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

byte b = (byte) 0xf1;

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

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

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

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

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

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

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

} }

Për këtë shembull, ndryshorja b mund të inicializohet me një numër negativ arbitrar, ne kemi përdorur një numër me paraqitje heksadecimal 0xf1. Ndryshores c i caktohet rezultati i një zhvendosjeje të shënuar b djathtas me 4 bit. Siç pritej, zgjerimi i bitit të nënshkruar bën që 0xf1 të bëhet 0xff. Pastaj rezultati i një zhvendosjeje të panënshkruar të b-së djathtas me 4 bit futet në ndryshoren d. Ju mund të prisni që d të përmbajë 0x0f si rezultat, por në realitet ne marrim përsëri 0xff. Ky është rezultati i zgjerimit të shenjës që kryhet kur ndryshorja b promovohet automatikisht në int përpara operacionit të zhvendosjes djathtas. Së fundi, në shprehjen për variablin e, arrijmë të arrijmë rezultatin e dëshiruar - vlerën 0x0f. Për ta bërë këtë, përpara se të zhvendoseshim djathtas, duhej të shumëzonim logjikisht vlerën e ndryshores b me maskën 0xff, duke pastruar kështu bitet e rendit të lartë të mbushura gjatë rritjes automatike të tipit. Vini re se nuk ka më nevojë për të përdorur zhvendosjen djathtas të panënshkruar, pasi ne e dimë gjendjen e bitit të shenjës pas operacionit AND.

C: \> java ByteUSshift

b = 0xf1

b >> 4 = 0xff

b >>> 4 = 0xff

b & 0xff) >> 4 = 0x0f

Operatorët e caktimit në bit

Ashtu si me operatorët aritmetikë, të gjithë operatorët binar bit kanë një formë të lidhur që lejon që rezultati i një operacioni të caktohet automatikisht në operandin e majtë. V shembullin e mëposhtëm krijohen disa variabla me numra të plotë, me të cilët kryhen operacione të ndryshme duke përdorur operatorët e treguar më sipër.

klasa OpBitEquals (

kryesore e zbrazët statike publike (args me vargje) (

int a = 1;

int b = 2;

int c = 3;

a | = 4;

b >> = 1;

Me<<= 1;

a ^ = c;

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

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

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

} }

Rezultatet e ekzekutimit të programit janë si më poshtë:

C: \> Java OpBitEquals

a = 3

b = 1

c = 6

Operatorët relacionalë

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

Operatori

Rezultati

më shumë ose të barabartë

më pak ose të barabartë

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

Operatorët logjikë Boolean

Operatorët logjikë Boolean, të përmbledhur në tabelën e mëposhtme, veprojnë vetëm në operandët Boolean. Të gjithë operatorët logjikë binarë pranojnë dy vlera boolean si operandë dhe kthejnë të njëjtin lloj.

Operatori

Rezultati

Operatori

Rezultati

logjike DHE (DHE)

DHE (DHE) me detyrë

logjik OSE (OR)

OSE (OR) me detyrë

ekskluzive logjike OSE (XOR)

ekskluzive OSE (XOR) me detyrë

operatori OR i vlerësimit të shprehjes së shpejtë ( qark i shkurtër OSE)

qark i shkurtër DHE operator

mohim logjik unar (JO)

operator tresh nëse-atëher-tjetër

Rezultatet e ndikimit të operatorëve logjikë në kombinime të ndryshme të vlerave të operandëve janë paraqitur në tabelë.

Programi më poshtë pothuajse plotësisht përsërit shembullin BitLogic që tashmë e dini. Vetëm por këtë herë ne po punojmë me vlerat boolean.

klasa BoolLogic (

kryesore e zbrazët statike publike (args me vargje) (

boolean a = e vërtetë;

boolean b = false;

boolean c = a | b;

boolean d = a & b;

boolean e = 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 = e vërtetë

b = e rreme

a | b = e vërtetë

a & b = e rreme

a ^ b = e vërtetë

a & b | a & b = e vërtetë

a = e rreme

Operatorët e Vlerësimit të Shpejtë shprehjet logjike(operatorë logjikë të qarkut të shkurtër)

Ka dy shtesa interesante në grupin e operatorëve Boolean. Këto janë versione alternative të operatorëve AND dhe OR për vlerësimin e shpejtë të shprehjeve Boolean. Ju e dini se nëse operandi i parë i një operatori OR është i vërtetë, atëherë pavarësisht nga vlera e operandit të dytë, rezultati i operacionit është i vërtetë. Në mënyrë të ngjashme, në rastin e operatorit AND, nëse operandi i parë është false, atëherë vlera e operandit të dytë nuk ndikon në rezultatin - do të jetë gjithmonë false. Nëse jeni duke përdorur && dhe || në vend të formave të zakonshme & dhe |, Java nuk vlerëson operandin e djathtë të një shprehjeje Boolean nëse përgjigja është e qartë nga vlera e operandit të majtë. Është praktikë e zakonshme përdorimi i && dhe || pothuajse në të gjitha rastet, duke vlerësuar shprehjet logjike Boolean. Versionet e këtyre operatorëve & dhe | zbatohen vetëm për aritmetikën e bitave.

Operatori tresh nëse-atëherë-ndryshe

Forma e përgjithshme e deklaratës if-then-use është si më poshtë:

shprehja 1? shprehja2: shprehja3

Si operand i parë - "shprehje1" - çdo shprehje, rezultati i së cilës është një vlerë boolean, mund të përdoret. Nëse rezultati është i vërtetë, atëherë ekzekutohet operatori i specifikuar nga operandi i dytë, domethënë "shprehja2". Nëse operandi i parë është false, atëherë ekzekutohet operandi i tretë - "shprehja3". Operandi i dytë dhe i tretë, domethënë shprehja 2 dhe shprehja 3, duhet të kthejnë vlera të të njëjtit lloj dhe nuk duhet të jenë të pavlefshme.

Programi më poshtë përdor këtë operator për të testuar pjesëtuesin përpara se të kryejë operacionin e ndarjes. Në rastin e një pjesëtuesi zero, vlera 0 kthehet.

klasa treshe (

kryesore e zbrazët statike publike (args me vargje) (

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

} }

Ky program nuk ngre një pjesëtim me zero përjashtim dhe nxjerr rezultatet e mëposhtme:

C: \> java treshe

a = 42

b = 2

c = 99

d = 0

a/b = 21

s / d = 0

Prioritetet e Operatorit

Java ka një renditje ose përparësi specifike të operacioneve. Në algjebër elementare, na mësuan se shumëzimi dhe pjesëtimi kanë një përparësi më të madhe se mbledhja dhe zbritja. Në programim, ju gjithashtu duhet të mbani gjurmët e prioriteteve të operacioneve. Tabela rendit në rend zbritës prioritetet e të gjitha operacioneve të gjuhës Java.

Rreshti i parë i tabelës rendit tre operatorë të pazakontë për të cilët nuk kemi folur ende. Kllapat () përdoren për të vendosur në mënyrë eksplicite prioritetin. Siç mësuat në kapitullin e mëparshëm, kllapat katrore përdoren për të indeksuar një variabël vargu. Operatori. (periudha) përdoret për të ndarë artikujt nga një referencë objekti - do të flasim për këtë në Kapitullin 7. Të gjithë operatorët e tjerë janë diskutuar tashmë në këtë kapitull.

Prioritete të qarta

Meqenëse prioriteti më i lartë i jepet kllapa të rrumbullakëta, gjithmonë mund të shtoni disa palë kllapa në një shprehje nëse keni dyshime për rendin e vlerësimit ose thjesht dëshironi ta bëni kodin tuaj më të lexueshëm.

a >> b + 3

Cila nga dy shprehjet, a >> (b + 3) ose (a >> b) + 3, përputhet rreshti i parë? Meqenëse operatori i mbledhjes ka përparësi më të lartë se operatori i ndërrimit, përgjigja e saktë është një >> (b + a). Pra, nëse ju duhet të kryeni një operacion (a >> b )+ 3 kllapat janë të domosdoshme.

Pra, ne kemi mbuluar të gjitha llojet e operatorëve në gjuhën Java. Tani mund të ndërtoni çdo shprehje Me tipe te ndryshme të dhëna... Në kapitullin vijues do të njihemi me konstruktet e degëzimit, organizimin e sytheve dhe do të mësojmë se si të kontrollojmë ekzekutimin e programit.

Operatorët logjikë të qarkut të shkurtër && dhe || janë të destinuara për operacione logjike AND (AND) dhe OSE (OR) në shprehje të tipit boolean. Vini re se nuk ka asnjë operator logjik stenografik për operacionin XOR (OR ekskluzive).

Operatorët e shkurtuar Boolean janë të ngjashëm me & dhe |, por ata janë të ndryshëm. vetëm për shprehjet e tipit boolean dhe nuk zbatohen kurrë për llojet integrale... Megjithatë, && dhe || kanë një veti të shquar: shkurtojnë vlerësimin e një shprehjeje nëse rezultati mund të nxirret nga një pjesë e shprehjes (këtë do ta shpjegoj me shembuj pak më vonë). Për shkak të kësaj vetie, && dhe || përdoren gjerësisht për të trajtuar shprehjet null. Ato gjithashtu ndihmojnë në rritjen e efektivitetit të të gjithë programit.

Vetia e shkurtimit vjen drejtpërdrejt nga ndryshimet midis && / || dhe & / |: çifti i fundit i operatorëve duhet të marrë vlerat e operatorëve të majtë dhe të djathtë, ndërsa për çiftin e parë të operatorëve ndonjëherë mjafton të dihet vlera vetëm e operandit të majtë për të kthyer vlerën e të gjithë shprehje. Kjo sjellje e operatorëve logjikë të cunguar bazohet në dy rregullat matematikore Tabela e së vërtetës logjike:

  • një shprehje me një operator AND është false (false) nëse vlera e të paktën një prej operandëve të saj është false;
  • një shprehje me një operator OR është e vërtetë nëse vlera e të paktën një prej operandëve të saj është e vërtetë.
Me fjale te tjera:
  • false DHE X = false
  • e vërtetë OSE X = e vërtetë
Kjo do të thotë, nëse operandi i majtë DHE i një shprehjeje është false, atëherë e gjithë shprehja është gjithashtu false, pavarësisht nga vlera e operandit të djathtë. Kjo do të thotë, nëse operandi i majtë është false, nuk ka nevojë të llogaritet vlera e operandit të djathtë. Në te njejtën mënyrë, nëse operandi i majtë i shprehjes OR është i vërtetë, atëherë të gjitha shprehjet janë gjithashtu të vërteta, pavarësisht nga vlera e operandit të djathtë, të cilin, për rrjedhojë, nuk kemi nevojë ta vlerësojmë.

Konsideroni një shembull kodi që shfaq një mesazh String nëse vargu nuk është i pavlefshëm dhe është i gjatë më shumë se 20 karaktere:

1.nëse ((s! = Null) && (s.gjatësia ()> 20)) (
2. System.out.println (s);
3. }

E njëjta detyrë mund të kodohet ndryshe:

1.nëse (s! = Nul) (
2.nëse (gjatësia ()> 20) (
3. System.out.println (s);
4. }
5. }

Nëse s do të ishte null, atëherë do të merrnim një NullPointerException kur thërrisnim metodën s.length (). Sidoqoftë, asnjë nga dy shembujt e kodit nuk do ta ketë këtë situatë. Në veçanti, në shembullin e dytë, s.length () nuk thirret kur s = null, për shkak të përdorimit të operatorit të shkurtuar &&. Nëse testi (s! = Null) ktheu false, domethënë s është një varg inekzistent, atëherë e gjithë shprehja garantohet të jetë false. Kjo do të thotë se nuk ka nevojë të llogaritet vlera e operandit të dytë, pra shprehjes (s.length ()> 20).

Megjithatë, këta operatorë kanë efekte anësore. Për shembull, nëse operandi i djathtë është një shprehje që kryen një operacion, atëherë kur përdoren operatorë të cunguar, ky operacion mund të dështojë nëse operandi i majtë është false.

Le të shqyrtojmë një shembull:
// shembulli i parë 1. int val = (int) (2 * Math.random ()); 2.test boolean = (val == 0) || (++ val == 2); 3. System.out.println (“test =“ + test + “\ nval =“ + val); // shembulli i dytë 1. int val = (int) (2 * Math.random ()); 2.Testi Boolean = (val == 0) | (++ val == 2); 3. System.out.println (“test =“ + test + “\ nval =“ + val);
Shembulli i parë ndonjëherë do ta printojë këtë:
provë = e vërtetë
val = 0

Dhe ndonjëherë kjo:
provë = e vërtetë
val = 2

Shembulli i dytë ndonjëherë do ta printojë këtë:
provë = e vërtetë
val = 1

Dhe ndonjëherë kjo:
provë = e vërtetë
val = 2

Dhe këtu është gjëja. Nëse val është 0, atëherë operandi i dytë (++ val) nuk do të vlerësohet kurrë, domethënë, val do të mbetet e barabartë me zero... Nëse fillimisht val është e barabartë me një, atëherë si rezultat kjo variabël do të rritet dhe do të shohim val = 2. Në shembullin e dytë, kur përdorni jo operatorët e shkurtuar, rritja ekzekutohet gjithmonë dhe rezultati do të jetë gjithmonë ose 1 ose 2, në varësi të vlerës së rastësishme të zgjedhur në hapin e parë. Në të dy shembujt, testi i ndryshores vlerësohet si i vërtetë sepse ose val = 0 ose val = 1 dhe rritet në vlerën 2.

Le të përmbledhim informacionin rreth operatorëve të shkurtuar && dhe ||:

  • Ato zbatohen për operandët boolean;
  • Ata llogaritin vlerën e operandit të djathtë vetëm nëse rezultati nuk mund të llogaritet bazuar në vlerën e operandit të majtë:
    • false DHE X = false
    • e vërtetë OSE X = e vërtetë

Artikujt kryesorë të lidhur