Operatør forrang - 1

"Hej, Bilaabo!"

"Bilaabo er glad for at hilse på sin ven!"

"I dag vil Bilaabo fortælle dig om operatørernes forrang. Men først vil han fortælle dig om operatørerne selv."

"Hvad er disse operatører, du taler om?"

"Faktisk er du allerede bekendt med dem. Du har måske ikke vidst, at de kaldes operatører."

"Sig for eksempel, at vi har udtrykket  c = a + b; "

"Den har to operatører: en tilføjelsesoperatør og en tildelingsoperatør."

"Med andre ord er operatorer bare matematiske tegn? Ligesom multiplikation, division og addition?"

"Ja, det er rigtigt. Der er dog forskelle."

"Jeg vil ikke definere operatører for dig: En definition vil ikke gøre dig klogere. Det er bedre at se dem i aktion. Operatører kan opdeles i flere grupper, som vi vil undersøge nu."

1) " Matematiske operatorer "

Symbol Eksempel Navn Beskrivelse (hvad det gør)
+ a + b Tilføjelsesoperatør Tilføjelsesoperatør.
- c - d Subtraktionsoperatør Trækker det andet tal fra det første.
* a * t Multiplikationsoperator Multiplicerer to tal.
/ a / b Divisionsoperatør Dividerer det første tal med det andet.
% c % d Dividerer det første tal med det andet. Beregner resten efter at have divideret det første tal med det andet.
- -a Unær minus Ændrer variablens fortegn til dets modsatte.
Plus til minus og minus til plus.
+ +a Unært plus Ændrer ikke noget. Dette blev tilføjet for at komplimentere den unære minusoperator. Det er kun for udseendet.

"Jeg genkender disse fra skolen. Min firmware inkluderer skolekurser."

"Men hvad er der med det procenttegn, en slags trolddom?"

"Det er operatoren " resten efter division ". Hvis 11 divideres med 5, får vi 2 og resten af ​​1. Denne 1 kan fås ved at skrive 11 % 5;"

"Når du dividerer heltal i Java, er resultatet også et heltal. Resten fra divisionsoperationen ignoreres simpelthen. Hvis vi dividerer 8 med 5, får vi 1."

Udtryk Resultat
19 / 10 1 Hvis vi dividerer 19 med 10, er resultatet 1 med en rest på 9.
19 % 10 9 Hvis vi dividerer 19 med 10, er resultatet 1 med en rest på 9.
2 / 5 0 Hvis vi dividerer 2 med 5,  er resultatet 0 med en rest på 2.
16 % 2 0 Hvis vi dividerer 16 med 2, er resultatet 8 med en rest på 0.

"Men hvad i alverden skal vi bruge resten til?"

"Antag at du skal tjekke om et heltal er lige. Så kan du skrive:"

if (a % 2 == 0)

"Og hvis du skal tjekke om b er ulige, så kan du skrive:"

if (b % 2 == 1)

"Eller for at kontrollere, om d er deleligt med 3:"

if (d % 3 == 0)

"Interessant. Det skal jeg huske."

2)  " Sammenligningsoperatører "

Symbol Eksempel Navn Beskrivelse (hvad det gør)
< a < b Mindre end Kontrollerer, om a er mindre end b.
<= c <= d Mindre end eller lig med Kontrollerer, om c er mindre end eller lig med d.
> a > b Bedre end Tjek om a er større end b.
>= c >= d Større end eller lig med Kontrollerer, om c er større end eller lig med d.
== i == j lige med Tjek om i er lig med j.
!= a != 0 Ikke lig med Kontrollerer, om a ikke er lig med nul.

"Jeg bruger allerede alle disse."

"Og hvad er hovedforskellen mellem disse operatorer og de matematiske operatorer?"

"Hvis vi tilføjer to tal, får vi et tal, men hvis vi sammenligner to tal, får vi sandt eller falsk."

"Det er rigtigt. Resultatet af en sammenligning er en " logisk værdi " værdi, der, som du ved, er repræsenteret af den boolske type. Der er to muligheder: sand eller falsk.

"Ja, det er helt klart. Jeg ved det allerede."

3) " Logiske operatorer "

Symbol Eksempel Navn Beskrivelse (hvad det gør)
&& a && b OG Udtrykkets resultat er kun sandt, når både a og b er sande.
|| c || d ELLER Udtrykkets resultat er sandt, hvis enten a eller b er sandt. Begge eller i det mindste den ene.
! !a IKKE Udtrykkets resultat er kun sandt, hvis a er falsk.

"Logiske operatorer kan kun bruges med booleske variabler eller udtryk."

Eksempel Beskrivelse
boolean a = true;
boolean b = true;if (a && b)
Hvis betingelsen er sand, hvis begge værdier er sande.
Med andre ord, hvis både a og b er sande, så er resultatet sandt .
boolean a = true;
boolean b = false;if (a || b)
Hvis betingelsen er sand, hvis mindst én værdi er sand.
Med andre ord, hvis enten a eller b er sand, så er resultatet sandt .
boolean b = false;

if (!b)

Hvis betingelsen er sand, hvis b ikke er sand.
Med andre ord, hvis   b er falsk , så er resultatet  sandt .
int a = 2, b = 3, c = 4;

if (a < b && a < c)
if ((a < b) && (a < c))

Hvis a er mindre end b og a er mindre end c, så er udtrykkets resultat sandt.
a, b og c er heltal, men resultatet af at sammenligne heltal er en logisk værdi (sand, falsk), hvilket betyder, at vi kan bruge logiske operatorer.

"Jeg ved alt dette allerede."

"Virkelig? Lad os så fortsætte."

4) " Bitvise operatorer "

Symbol Eksempel Navn Beskrivelse (hvad det gør)
& a & b OG Bitvis OG
| c | d ELLER Bitvis ELLER
~ ~a IKKE Bitvis IKKE
^ a ^ b XOR Bitvis "EKSKLUSIVT ELLER"

" Bitvise operatorer udfører bit-for-bit operationer på heltal."

"Hvad er det?"

"Hvert tal er repræsenteret som et sæt bits, og derefter beregnes resultatet som følger:"

"Hvis den første bit af begge tal er 1, så vil resultatets første bit være 1."

"Hvis den anden bit af begge tal er 1, så vil resultatets anden bit være 1. Og så videre."

"Gælder det for alle bitvise operatører?"

"Det er meget enklere end som så. En bit kan kun have to værdier, 0 og 1, ikke?"

"Højre."

"Tænk så på 1 som sand og 0 som falsk. Operationer på individuelle bits vil så være næsten identiske med logiske operationer:"

Logisk udtryk Bitvis udtryk
sand && sand == sand 1&1 == 1
sand && falsk == falsk 1&0 == 0
sandt || sandt == sandt 1|1 == 1
sandt || falsk == sand 1|0 == 1
falsk || falsk = falsk 0|0 == 0
!falsk == sand ~0 == 1
!sandt == falsk ~1 == 0

"Åh! Det er så nemt."

"Ja, bare glem ikke, at bitvise operationer bruger tilsvarende bit fra to tal."

"Ja, jeg kan huske: den første bit af et tal er parret med den første bit af det andet, og resultatet skrives også til den første bit. Og det samme gælder resten af ​​bits."

"Det er rigtigt. Har du andre spørgsmål?"

"Hvad er der med XOR og 'eksklusiv eller'?"

"Det er et stykke kage: Når værdierne er forskellige, er det sandt; når de er ens, er det falsk."

Logisk udtryk Bitvis udtryk
sand XELLER sand == falsk 1 ^ 1 == 0
falsk XOR falsk == falsk 0 ^ 0 == 0
sand XOR falsk == sand 1 ^ 0 == 1
falsk XOR sand == sand 0 ^ 1 == 1

Her er et par flere eksempler på bitvise operationer:

Eksempel Tal som bits Resultat som bits Resultat
5 & 3 0000010 1  & 0000001 1 0000000 1 1
7 & 2 000001 1 1 & 000000 1 0 00000010 2
5 | 9 00000 1 0 1  | 0000 1 00 1 00001101 13
5 ^ 9 00000 101  ^ 00001001 0000 1100 12
~9 ~ 00001001 11110110 246

"Tak, Bilaabo. Nu ved jeg det."

"Der er endnu en gruppe af bitvise operatorer, skiftoperatorerne:"

5) " Skiftoperatører "

Symbol Eksempel Navn Beskrivelse (hvad det gør)
>> a >> b højre skift Skifter bits af tallet a til højre med b-cifre.
<< c << d venstre skift Skifter bits af tallet c til venstre med d cifre.
>>> a >>> 2 usigneret højreskift Flytter bits af tallet a til højre med 2 cifre.

"Hvad er det for en gademagi?"

"Det er faktisk alt sammen meget simpelt. Tjek det ud:"

Eksempel Tal som bits Resultat som bits Resultat
10 >> 1 0000 101 0 >> 1 00000 101 5
10 >> 2 0000 101 0 >> 2 000000 10 2
10 << 1 0000 101 0 << 1 000 101 00 20
10 << 2 0000 101 0 << 2 00 101 000 40

"At flytte et tals bits til venstre med 1 er det samme som at gange tallet med 2. Forskydning med to cifre svarer til multiplikation med 4, med tre cifre - multiplikation med 8, og så videre."

"Skifte til højre svarer til at dividere med 2, 4, 8, 16 osv."

"Men hvad er forskellen mellem >>> og >> operatørerne?"

"De adskiller sig, når man arbejder med negative tal. Det skyldes  , at tal med fortegn bruger bit længst til venstre til at angive tegnet. Som et resultat holder et negativt tal op med at være negativt, når man skifter til højre. Så de fandt på to forskellige operatorer. Tjek det ud:"

Udtryk Resultat Beskrivelse
1 000 1010 >> 1 11 000 101 Det negative tal forbliver negativt.
For negative tal er de indkommende bits fyldt med 1s.
1 000 1010 >> 2 111 000 10
1 000 1010 >> 3 1111 000 1
1 000 1010 >>> 1 01 000 101 Det negative tal er ikke længere negativt. For negative tal er de indkommende bits fyldt med 0'er.
1 000 1010 >>> 2 001 000 10
1 000 1010 >>> 3 0001 000 1

"Skiftet er ikke cyklisk. Bits, der bevæger sig ud over venstre eller højre kant af nummeret, kasseres simpelthen."

6) " Tildelingsoperatører "

"Jeg ved allerede, hvad opgave er. Men hvorfor siger du 'operatører'?"

"Fordi der er flere af dem ☺"

Operatør Hvad det betyder
a += b; a = a + b;
a -= b; a = a - b;
a *= b; a = a * b;
a %= b; a = a % b;
a |= b; a = a | b;
a &= b; a = a & b;

"Jeg tror, ​​du forstår logikken."

7) " Inkrement og reduktion operatører "

Notation Eksempel Beskrivelse
++ a++;
++b;
Øger tallet med 1.
-- d--;
--i;
Formindsker tallet eller variablen med 1.

"Er der forskel på at sætte de to minustegn før eller efter variablen?"

"Ja, det er der, men ikke særlig stort. Hvis en variabel med en af ​​disse operatorer er en del af et udtryk eller en tildeling, så er der forskelle. Jeg vil hellere vise dig som eksempel:"

Eksempel Hvad sker der virkelig Beskrivelse
int a = 3;
int b = ++a;
int a = 3;
a = a + 1;
int b = a;
a øges først med 1, og derefter bruges det i udtrykket.
int a = 3;
int b = a++;
int a = 3;
int b = a;
a = a + 1;
a bruges først i udtrykket og øges derefter med 1.
int a = 3;
return a++;
int a = 3;
int result = a;
a = a + 1;
return result;
Funktionen returnerer 3, men værdien af ​​a øges med 1.
int x = 5;
x = ++x + ++x;
int x = 5;
int a = x + 1;// The first term is 6
x = a;
int b = x + 1;// The second term is 7
x = b;
x = a + b;
Resultatet her er 13. Først vil x stige med 1, og denne værdi vil erstatte det første led, og derefter vil x igen stige med 1.

"Wow! Det er fedt!"

"Jeg er glad for, at du kunne lide det. Men hvis der ikke er noget udtryk eller opgave, så er der ingen forskelle:"

"x++ svarer til x = x + 1."

"++x svarer til x = x + 1."

"Det vil jeg huske på. Tak, Bilaabo."

8)  " Ternær operatør "

"Denne operator bruger ikke kun en eller to variable eller udtryk. Den bruger tre variable eller udtryk på én gang:"

Notation Tilsvarende kode:
a ? b : c; if (a)
b
else
c
int min = a < b ? a : b; if (a < b)
min = a;
else
min = b;
return a != null ? a.length : 0; if (a != null)
return a.length;
else
return 0;

"Nå, det er super praktisk."

"Ja. Og den er kompakt, og koden er læsbar. Nyd at bruge den!"

9) " Andet "

"Uanset hvor godt organiseret din musiksamling er, skal du stadig oprette en "Diverse"-mappe."

"Ja, enhver, der nogensinde har været nødt til at kategorisere musik, ville være helt enig."

"Så der er yderligere tre operatører, jeg vil fortælle dig om:"

Notation Eksempel Beskrivelse
() (a + b) * c Parentes øger operatørens forrang.
Ting i parentes udføres først.
[] c [i] = c [i + 1]; Hent et array-element efter indeks.
. int n = a.length; " Prikoperatoren " får adgang til et objekts variabler og metoder.

"Og endelig, her er en tabel, der opsummerer operatørens forrang:"

Operatører Eksempler
Højeste prioritet (operatører udføres i henhold til deres rækkefølge i denne tabel)
()
[]
.
(a + b)
c [i] = c [i] + 1
++
--
~
!
+
-
i++; ++i;
--j; a--;
~c
!f
return +a;
return -a;
*
/
%
a * b
c / d
a % b
+
-
a + b
c - d
String s = "count"+"35";
>>
<<
>>>
a >> 3
b << 2
c >>> 3
<
<=
>
>=
a < b
a <= b
c > b
c >= b
==
!=
a == 3
a != 0
& a & 7
^ a ^ b
| a | b
&& (a < b) && (a < c)
|| (b != 0) || (c != 0)
? : = a > 0 ? a : -a;
=
*=, /=, %=
-=, +=
<<=. >>=, >>>=
&=, ^=. |=
Laveste prioritet (udført sidst)