Operatørprioritet - 1

"Hei, Bilaabo!"

"Bilaabo er glad for å hilse på vennen sin!"

"I dag vil Bilaabo fortelle deg om operatørprioritet. Men først vil han fortelle deg om operatørene selv."

"Hva er disse operatørene du snakker om?"

"Du er faktisk allerede kjent med dem. Du har kanskje ikke visst at de kalles operatører."

"For eksempel, si at vi har uttrykket  c = a + b; "

"Den har to operatører: en tilleggsoperatør og en oppdragsoperatør."

"Med andre ord, operatorer er bare matematiske tegn? Som multiplikasjon, divisjon og addisjon?"

"Ja, det er sant. Men det er forskjeller."

"Jeg vil ikke definere operatører for deg: en definisjon vil ikke gjøre deg smartere. Det er bedre å se dem i aksjon. Operatører kan deles inn i flere grupper, som vi skal undersøke nå."

1) " Matematiske operatorer "

Symbol Eksempel Navn Beskrivelse (hva det gjør)
+ a + b Tilleggsoperatør Tilleggsoperatør.
- c - d Subtraksjonsoperatør Trekker det andre tallet fra det første.
* a * t Multiplikasjonsoperator Multipliserer to tall.
/ a / b Divisjonsoperatør Deler det første tallet med det andre.
% c % d Deler det første tallet med det andre. Beregner resten etter å ha delt det første tallet med det andre.
- -a Unært minus Endrer variabelens fortegn til det motsatte.
Pluss til minus, og minus til pluss.
+ +a Unært pluss Endrer ingenting. Dette ble lagt til for å komplimentere den unære minusoperatoren. Det er bare for utseende.

"Jeg kjenner igjen disse fra skolen. Firmwaren min inkluderer skolekurs."

"Men hva er det med det prosenttegnet, en slags trolldom?"

"Det er " resten etter divisjon "-operatoren. Hvis 11 deles på 5, får vi 2 og resten av 1. Denne 1-en kan fås ved å skrive 11 % 5;"

"Når du deler heltall i Java, er resultatet også et heltall. Resten fra divisjonsoperasjonen ignoreres ganske enkelt. Hvis vi deler 8 med 5, får vi 1."

Uttrykk Resultat
19 / 10 1 Hvis vi deler 19 på 10, blir resultatet 1 med resten av 9.
19 % 10 9 Hvis vi deler 19 på 10, blir resultatet 1 med resten av 9.
2 / 5 0 Hvis vi deler 2 på 5,  blir resultatet 0 med resten av 2.
16 % 2 0 Hvis vi deler 16 med 2, blir resultatet 8 med en rest på 0.

"Men hva i all verden trenger vi resten til?"

"Anta at du må sjekke om et heltall er partall. Så kan du skrive:"

if (a % 2 == 0)

"Og hvis du trenger å sjekke om b er merkelig, kan du skrive:"

if (b % 2 == 1)

"Eller for å sjekke om d er delelig med 3:"

if (d % 3 == 0)

"Interessant. Jeg skal huske det."

2)  " Sammenligningsoperatører "

Symbol Eksempel Navn Beskrivelse (hva det gjør)
< a < b Mindre enn Sjekker om a er mindre enn b.
<= c <= d Mindre enn eller lik Sjekker om c er mindre enn eller lik d.
> a > b Større enn Sjekker om a er større enn b.
>= c >= d Større enn eller lik Sjekker om c er større enn eller lik d.
== i == j er lik Sjekker om i er lik j.
!= a != 0 Ikke lik Sjekker om a ikke er lik null.

"Jeg bruker allerede alle disse."

"Og hva er hovedforskjellen mellom disse operatorene og de matematiske operatorene?"

"Hvis vi legger til to tall, får vi et tall, men hvis vi sammenligner to tall, får vi sant eller usant."

"Det stemmer. Resultatet av en sammenligning er en " logisk verdi " verdi, som, som du vet, er representert av den boolske typen. Det er to muligheter: sant eller usant.

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

3) " Logiske operatorer "

Symbol Eksempel Navn Beskrivelse (hva det gjør)
&& a && b OG Uttrykkets resultat er bare sant når både a og b er sanne.
|| c || d ELLER Uttrykkets resultat er sant hvis enten a eller b er sant. Begge eller minst én.
! !a IKKE Uttrykkets resultat er bare sant hvis a er usant.

"Logiske operatorer kan bare brukes med boolske variabler eller uttrykk."

Eksempel Beskrivelse
boolean a = true;
boolean b = true;if (a && b)
Hvis-betingelsen er sann hvis begge verdiene er sanne.
Med andre ord, hvis både a og b er sanne, så er resultatet sant .
boolean a = true;
boolean b = false;if (a || b)
Hvis-betingelsen er sann hvis minst én verdi er sann.
Med andre ord, hvis enten a eller b er sann, så er resultatet sant .
boolean b = false;

if (!b)

Hvis-betingelsen er sann hvis b ikke er sann.
Med andre ord, hvis   b er usann , er resultatet  sant .
int a = 2, b = 3, c = 4;

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

Hvis a er mindre enn b og a er mindre enn c, er uttrykkets resultat sant.
a, b og c er heltall, men resultatet av å sammenligne heltall er en logisk verdi (true, usant), som betyr at vi kan bruke logiske operatorer.

"Jeg vet alt dette allerede."

"Virkelig? La oss fortsette, da."

4) " Bitvise operatorer "

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

" Bitvise operatorer utfører bit-for-bit operasjoner på heltall."

"Hva er det?"

"Hvert tall er representert som et sett med biter, og deretter beregnes resultatet som følger:"

"Hvis den første biten av begge tallene er 1, vil resultatets første bit være 1."

"Hvis den andre biten av begge tallene er 1, vil resultatets andre bit være 1. Og så videre."

"Gjelder det for alle bitvise operatører?"

"Det er mye enklere enn det. En bit kan bare ha to verdier, 0 og 1, ikke sant?"

"Ikke sant."

"Tenk så på 1 som sant, og 0 som usant. Operasjoner på individuelle biter vil da være nesten identiske med logiske operasjoner:"

Logisk uttrykk Bitvis uttrykk
sant && sant == sant 1&1 == 1
sant && usant == usant 1&0 == 0
sant || sant == sant 1|1 == 1
sant || usant == sant 1|0 == 1
usant || falsk = falsk 0|0 == 0
!false == sant ~0 == 1
!true == usant ~1 == 0

"Å! Det er så lett."

"Ja, bare ikke glem at bitvise operasjoner bruker tilsvarende biter fra to tall."

"Ja, jeg husker: den første biten av ett tall er sammenkoblet med den første biten av den andre, og resultatet skrives også til den første biten. Og det samme gjelder resten av bitene."

"Det stemmer. Har du andre spørsmål?"

"Hva er det med XOR og 'eksklusiv eller'?"

"Det er et stykke kake: når verdiene er forskjellige, er det sant; når de er like, er det falskt."

Logisk uttrykk Bitvis uttrykk
sant XELLER sant == usann 1 ^ 1 == 0
usann XOR usann == usann 0 ^ 0 == 0
sant XOR usant == sant 1 ^ 0 == 1
usant XOR sant == sant 0 ^ 1 == 1

Her er et par flere eksempler på bitvise operasjoner:

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

"Takk, Bilaabo. Nå vet jeg det."

"Det er enda en gruppe bitvise operatører, skiftoperatørene:"

5) " Skiftoperatører "

Symbol Eksempel Navn Beskrivelse (hva det gjør)
>> a >> b høyre skift Skifter bitene av tallet a til høyre med b sifre.
<< c << d venstre shift Skifter bitene av tallet c til venstre med d sifre.
>>> a >>> 2 usignert høyreskift Skifter bitene av tallet a til høyre med 2 sifre.

"Hva slags gatemagi er dette?"

"Det hele er faktisk veldig enkelt. Sjekk det ut:"

Eksempel Tall som biter Resultat som biter Resultat
10 >> 1 0000 101 0 >> 1 00000 101 5
10 >> 2 0000 101 0 >> 2 000 000 10 2
10 << 1 0000 101 0 << 1 000 101 00 20
10 << 2 0000 101 0 << 2 00 101 000 40

"Å flytte et talls biter til venstre med 1 er det samme som å multiplisere tallet med 2. Skifte med to sifre tilsvarer multiplikasjon med 4, med tre sifre - multiplikasjon med 8, og så videre."

"Skifting til høyre tilsvarer å dele med 2, 4, 8, 16, osv."

"Men hva er forskjellen mellom >>> og >> operatørene?"

"De er forskjellige når man jobber med negative tall. Dette er fordi  fortegnede tall bruker biten lengst til venstre for å indikere tegnet. Som et resultat slutter et negativt tall å være negativt når man skifter til høyre. Så de kom opp med to forskjellige operatorer. Sjekk det ut:"

Uttrykk Resultat Beskrivelse
1 000 1010 >> 1 11 000 101 Det negative tallet forblir negativt.
For negative tall fylles de innkommende bitene med 1-er.
1 000 1010 >> 2 111 000 10
1 000 1010 >> 3 1111 000 1
1 000 1010 >>> 1 01 000 101 Det negative tallet er ikke lenger negativt. For negative tall fylles de innkommende bitene med 0-er.
1 000 1010 >>> 2 001 000 10
1 000 1010 >>> 3 0001 000 1

"Skiftet er ikke syklisk. Biter som beveger seg utover venstre eller høyre kant av tallet blir ganske enkelt forkastet."

6) " Oppdragsoperatører "

"Jeg vet allerede hva oppdrag er. Men hvorfor sier du "operatører"?

"Fordi det er flere av dem ☺"

Operatør Hva det betyr
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 skjønner logikken."

7) " Opp- og reduksjonsoperatører "

Notasjon Eksempel Beskrivelse
++ a++;
++b;
Øker tallet med 1.
-- d--;
--i;
Reduserer tallet eller variabelen med 1.

"Er det forskjell på å sette de to minustegnene før eller etter variabelen?"

"Ja, det er det, men ikke veldig stort. Hvis en variabel med en av disse operatorene er en del av et uttrykk eller en tilordning, så er det forskjeller. Jeg vil heller vise deg ved eksempel:"

Eksempel Hva skjer egentlig Beskrivelse
int a = 3;
int b = ++a;
int a = 3;
a = a + 1;
int b = a;
a økes først med 1, og deretter brukes det i uttrykket.
int a = 3;
int b = a++;
int a = 3;
int b = a;
a = a + 1;
a brukes først i uttrykket, og øker deretter med 1.
int a = 3;
return a++;
int a = 3;
int result = a;
a = a + 1;
return result;
Funksjonen vil returnere 3, men verdien av a økes 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 øke med 1, og denne verdien vil erstatte det første leddet, og så vil x igjen øke med 1.

"Wow! Det er kult!"

"Jeg er glad du likte det. Men hvis det ikke er noe uttrykk eller oppgave, så er det ingen forskjeller:"

"x++ er ekvivalent med x = x + 1."

"++x er ekvivalent med x = x + 1."

"Jeg skal ha det i bakhodet. Takk, Bilaabo."

8)  " Ternær operatør "

"Denne operatøren bruker ikke bare én eller to variabler eller uttrykk. Den bruker tre variabler eller uttrykk samtidig:"

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

"Vel, det er veldig praktisk."

"Ja. Og den er kompakt og koden er lesbar. Nyt å bruke den!"

9) " Annet "

"Uansett hvor godt organisert musikksamlingen din, må du fortsatt lage en "Diverse"-mappe."

"Ja, alle som noen gang har måttet kategorisere musikk vil være helt enig."

"Så det er tre operatører til jeg vil fortelle deg om:"

Notasjon Eksempel Beskrivelse
() (a + b) * c Parentes øker operatørens forrang.
Ting i parentes utføres først.
[] c [i] = c [i + 1]; Få et matriseelement etter indeks.
. int n = a.length; " Prikkoperatoren " får tilgang til et objekts variabler og metoder.

"Og til slutt, her er en tabell som oppsummerer operatørprioritet:"

Operatører Eksempler
Høyeste prioritet (operatører utføres i henhold til rekkefølgen i denne tabellen)
()
[]
.
(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 (utført sist)