"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;
|
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;
|
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) |
GO TO FULL VERSION