Hallo en welkom. Nu we het hebben gehad
over alle belangrijke operators, de fundamentele, de rare, moeten we
het hebben over dit kleine concept van operatorprioriteit.
Dit komt dus in feite van pas wanneer hoe evalueer je de volgorde van deze operatoren.
Dus operatorprioriteit bepaalt de groepering van de termen en uitdrukking en
beslist hoe een uitdrukking wordt geëvalueerd.
Nu hoef je dit echt niet te begrijpen als je
haakjes gebruikt, waar we zo op komen, maar je moet dit concept begrijpen omdat het deel
uitmaakt van de taal, het maakt deel uit van het begrijpen van de taal.
Dus voorrang zal de volgorde van evaluatie dicteren wanneer
twee operators een operand delen.
En dit wordt duidelijk met een voorbeeld.
Zo heeft de vermenigvuldigingsoperator bijvoorbeeld een hogere prioriteit dan de
extra operator.
Bepaalde operators zullen een andere volgorde van evaluaties hebben. Dus als u een samengestelde instructie
zou doen waarbij
u veel verschillende berekeningen uitvoert, bijvoorbeeld 7 plus 3 keer 2.
Dit kan meerdere resultaten
hebben, de optelling en je doet de vermenigvuldiging.
U moet begrijpen of ik eerst de optelling moet doen of moet ik eerst de vermenigvuldiging doen, want
afhankelijk van wat u eerst doet, verandert het resultaat.
Dus deze x is bijvoorbeeld gelijk aan 7 plus 3 keer
2, het resultaat kan 13 of 20 zijn, afhankelijk van
de volgorde waarin je elke operand evalueert.
Dus de volgorde van het uitvoeren van de verschillende bewerkingen kan een enorm verschil maken.
En dit is waarom je voorrang moet begrijpen.
C geeft specifieke regels om te kiezen wat als eerste moet worden gedaan.
In dit geval doe ik de vermenigvuldiging van plus. Nou, c gaat je vertellen wat er gaat gebeuren.
Idealiter zou je, als je die tussen haakjes zet, hem vertellen wat hij moet doen,
je zou die beslissing nemen. Maar als je dat niet tussen haakjes
zet, zal de programmeertaal de beslissing voor je nemen.
Dus in c heeft vermenigvuldiging een hogere prioriteit
dan de opteloperator. Dus wat er gaat gebeuren is dat het resultaat 13 wordt.
Nu zou je ofwel 7 plus 3 kunnen zeggen, wat 10 is,
en dan vermenigvuldigen met 2, het resultaat zou 20 zijn.
Of je kunt 7 plus 3 keer 2 doen, wat 7 plus 6 is, wat 13 is.
Dus zo kun je verschillende waarden hebben.
Dat is dubbelzinnig. Doe je eerst de plus of doe je de vermenigvuldiging eerst.
Gelukkig wordt dat weer bepaald door de taal. Maar je kunt zien hoe er twee verschillende resultaten zijn.
7 plus 3 keer 2
of 7 plus 3 keer 2. Daar zie je de pauze.
Nu gaat c het laatste doen. Het gaat eerst de vermenigvuldiging doen omdat
dat een hogere prioriteit heeft.
Dus het gaat 3 keer 2 doen, wat 6 is en dan gaat het optellen tot 7.
Dus het resultaat x wordt 13 omdat het sterretje een
hogere prioriteit heeft dan de optelling.
En dus zijn er regels voor elke operator, welke
operator voorrang heeft op de andere.
Er is een prioriteitsniveau.
En vermenigvuldigen en delen hebben een hogere prioriteit dan optellen en aftrekken.
Dus dat is dat ze bijvoorbeeld als eerste worden uitgevoerd.
U kunt al deze voorrang vermijden en de taal voor u
laten beslissen als u haakjes opgeeft.
Haakjes groeperen de uitdrukkingen altijd met
de hoogste prioriteit. Dus als ik zeg 7 plus 3 en ik zet dat tussen
haakjes, dan zal het altijd eerst de optelling doen.
Als ik zeg
3 keer 2 en ik zet dat tussen
haakjes, dan zal het altijd de vermenigvuldiging doen en dan alles optellen buiten de haakjes.
Je zou dus eigenlijk alleen haakjes moeten gebruiken. Gebruik altijd haakjes.
Anders beslist de taal voor je. Je moet alle prioriteitsniveaus onthouden, wat
moeilijk is, zoals ik je in de volgende tabel ga laten zien.
Er zijn veel verschillende operators en je moet de voorrang
weten voor al deze verschillende operators.
Het kan dus heel erg verwarrend worden.
Dit is vergelijkbaar met wat je weet, of je laat de taal een impliciete conversie voor
je doen of je doet het met een expliciete conversie met een cast-operator,
hetzelfde type idee hier, gebruik gewoon haakjes.
Dus als we naar deze tabel kijken, waar we straks naar zullen kijken, denk ik omdat ik
het eerst over associativiteit wil hebben.
Associativiteit is gerelateerd aan prioriteit, want wat gebeurt er
als twee operators dezelfde prioriteit hebben. Hoe bepaal je dan de volgorde.
Nou, dan pas je associativiteit toe. Dus wanneer operators
hetzelfde prioriteitsniveau hebben, dan pas je aanvullende regels toe.
Associativiteit is dus eigenlijk of je aan de
linkerkant begint en naar rechts of rechts naar links gaat.
Dus als je een operand deelt en ze worden allebei in dezelfde volgorde
uitgevoerd, dan ga je ze uitvoeren in de volgorde van de instructie
op basis van de associativiteitsregel. Dus voor de meeste operators
is de volgorde van links naar rechts. Dus laat me je een voorbeeld laten zien.
Als u zegt dat 1 is gelijk aan 2 is niet gelijk aan
3, dan hebben de operatoren is gelijk aan en niet gelijk aan
het uitroepteken gelijk aan dezelfde prioriteit.
In dit geval hebben we dus een dubbelzinnigheid. We hebben een probleem.
We weten niet wat we eerst moeten evalueren. We weten niet of we 1 gelijk aan
2 moeten doen of 2
niet gelijk is aan 3 en dat is belangrijk omdat je een Booleaanse uitdrukking gebruikt.
Dit is een booleaanse uitdrukking hier, dus jongens keren terug naar waar of onwaar.
Dus wat je hier zou doen, is associativiteit toepassen.
De associativiteit van zowel de gelijken is gelijk aan als de niet gelijken is van links naar rechts.
Je gaat eerst doen 1 is gelijk aan 2, dat wordt niet waar.
En dan ga je onwaar zeggen, wat niet
gelijk is aan
3, wat het niet is. Dus 1 is gelijk aan
2 en dan is dat niet gelijk aan 3.
Het resultaat zal dus vals zijn. Dus de uitdrukking aan de linkerkant wordt als
eerste uitgevoerd en beweegt naar rechts.
Dus hoe je dat wilt bedenken, is dat het in feite gelijk is aan deze haakjes.
Eerst ga je evalueren dat één gelijk is aan 2.
En als dat waar of onwaar evalueert, ga je zeggen dat dat gelijk is aan 3.
En dit is verwarrend omdat het geen
echte of valse waarden heeft.
Maar 1 is gelijk aan is, onthoud dat dit de vergelijkingsoperator is, dat is niet de toewijzingsoperator.
En we gebruiken hier geen variabelen, dus het is nog verwarrender.
Maar als je deze getallen in
variabelen zou zetten, zou je zeggen als, als x gelijk is aan y, dus
als x 1 was en y 2, dan zou dat 2 onwaar zijn.
Omdat ze allebei niet gelijk zijn. En als 3 een andere variabele z
was die gelijk is aan 3, zeg
je dat x gelijk is aan y onwaar is, en dat z
gelijk is aan 3. Dus false
is niet gelijk aan 3. Het zou dus vals zijn.
Dus 1 is gelijk aan 2 voert eerst uit, resultaat weer 0 false.
Dan is 0 niet gelijk aan 3, wordt uitgevoerd wat resulteert in de 1 waar.
Dus ik zei aanvankelijk onwaar, maar het is duidelijk dat 0 niet gelijk is aan 3,
wat het hele ding zou evalueren als onwaar.
Het hele ding zou als waar worden beoordeeld, het spijt me omdat 0 niet gelijk is aan 3.
Dus 0 is niet gelijk aan 3 Ik zei dat het onwaar is omdat ze niet gelijk zijn,
maar dat betekent dat het in feite waar is.
Dus best netjes daar. Hier is onze tabel die alle
voorrangs- en associativiteitsregels zegt en het is erg moeilijk om dit te onthouden.
Dus nogmaals, wat doe je, haakjes gebruiken.
Maar hier is de tafel. Het hoogste prioriteitsniveau staat
bovenaan, dus de postfix-operators hebben het hoogste voorkeursniveau.
En als je een van die in dezelfde uitdrukking gebruikt, dan lees je
van links naar rechts.
Dus de postfix-operators, dingen zoals de
haakjes hebben de hoogste prioriteit.
Dus elke keer dat je iets tussen haakjes opneemt, wordt het van kracht.
Maar je hebt de haakjes en dan
heb je postfix-operators. We hebben nog niet
gesproken over een paar aanwijzers, wat dit streepje groter is dan, maar
we weten nu wel over plus plus
en min minus die postfix
zijn en de hoogste prioriteit hebben. Unaire operatoren dingen zoals de plus minus,
het uitroepteken voor niet, de tilde voor de bitsgewijze, de plus plus de
min minus en dan wordt de casting-operator een unaire operator genoemd omdat deze maar één operand heeft.
En dan is de asterisk-operator de pointer-operator. Het ampersand is de bitsgewijze en
de grootte van.
Die hebben de op één na hoogste prioriteit.
Maar hier lees je eigenlijk van rechts naar
links naar evaluatie als je twee staatsverklaringen op dezelfde regel hebt.
En dan gaan we gewoon weer in bestellingen. U moet deze volgorde kennen en onthouden. Dus best moeilijk om te doen, maar
ik wilde het je laten zien, ik wilde alleen een kleine
illustratie hebben om enkele van de tabellen te laten zien. Er zijn veel operators.
En dus zijn er veel aanwezigheidsniveaus, en er is de associativiteit voor het grootste deel, zoals we
eerder zeiden, is van links naar rechts.
Je hebt alleen de associativiteit van rechts links voor de unaire operatoren.
Dus de bitsgewijze operators volgen naar beneden, allemaal
van links naar rechts. Voorwaardelijke ternaire operatoren van rechts naar links.
Toewijzingsoperators staan altijd onderaan. Dat wordt altijd als laatste beoordeeld.
En als ze gelijk zijn, evalueer je de andere daar van rechts naar links.
En dan wordt komma ook wel een operator genoemd. Dat is van links naar rechts.
Een ander concept, hoewel voorrang en associativiteit
dat we niet echt gaan behandelen
met deze andere voorbeelden. We gaan de hele tijd de
haakjes gebruiken, en dat is wat je wilt doen.
Maar nogmaals, als je de taal volledig wilt begrijpen, wil je deze concepten begrijpen, daarom vertel ik het je.
Niemand kan beweren dat ze taal kennen als ze sommige details als deze niet kennen.
Maar gebruik zoveel mogelijk haakjes. Dank u.