Operatorprioritet eller prioriteringsregler för operatorer är ett begrepp inom bland annat matematik och programmering. Operatorprioriteten används för att avgöra i vilken ordning operationer (räknesätt) utförs om man reducerar (beräknar) ett matematiskt uttryck. Behovet kommer från att vissa uttryck, exempelvis 1 + 2 · 3 har olika värden beroende på om man först adderar 1 + 2 (då uttrycket har värdet 9) eller först multiplicerar 2 · 3 (då uttrycket har värdet 7).

Prioriteringsregler i matematikRedigera

De prioriteringsregler som används i matematik kan sammanfattas med följande: "Först beräknas parenteser, sedan potenser, därefter utförs multiplikation och division i valfri ordning. Sist utförs addition och subtraktion i valfri ordning. Det kan förekomma flera parenteser inne i varandra; man börjar då inifrån."[1] Negativtecken prioriteras lägre än potenser, vilket exempelvis innebär att −3² har värdet −9.[2] (Se dock under tvetydigheter och avsteg nedan.)

Ibland används hakparenteser istället för vanliga parenteser för att göra det enklare att läsa. Det förekommer att prioriteringsreglerna som anges ovan kompletteras med en vänster-till-höger-princip, så att 1 / 2 · 3 tolkas som (1/2) · 3 och 1 − 2 + 3 tolkas som (1 − 2) + 3. Detta är dock inte en självklar konvention och man kan inte utgå från att den används av alla.

Prioriteringsreglerna är en konvention – det finns vanligtvis inget inneboende i matematiken eller matematiska uttryck som säger att visa operationer bör eller måste behandlas före andra.

MinnesreglerRedigera

 
Den så kallade prioriteringsdjävulen är en minnesregel för prioriteringsregler i matematik. Räknesätt/operatorer högre upp i bilden har företräde framför de lägre ner.

En minnesregel för prioriteringsreglerna är akronymen PUMDAS/PEMDAS: parentes, upphöjt/exponenter, multiplikation, division, addition, subtraktion. Dessa minnesregler säger att multiplikation respektive addition har högre prioritet än division respektive subtraktion, vilket inte följer från beskrivningen av prioriteringsregler i Matematiktermer för skolan (ovan).

En annan minnesregel är den så kallade prioriteringsdjävulen (se bild), där parenteser och räknesätt utgör ett ansikte. Prioritering på räknesätt kan läsas uppifrån och ner i bilden.

Tvetydigheter och avstegRedigera

Prioriteringsreglerna som anges ovan räcker inte för att entydigt avgöra hur alla uttryck ska beräknas eller utvärderas. Nedan följer några exempel på tvetydigheter.

  • Uttrycket 1 / 2 · 3 kan både ha värdet 1,5 och 1/6, beroende på om det tolkas som (1/2) · 3 eller 1 / (2·3). För att undvika tvetydigheter kan man exempelvis skriva ut parenteser eller använda bråkstreck:   respektive  .
  • Uttrycket a/bc kan både tolkas som (a / b) · c och a / (bc). Den senare tolkningen är vanligare eftersom implicit multiplikation ("bc" i stället för "b · c") ofta ges prioritet framför explicit multiplikation och division, men det är alltså inte en självklar princip.
  • Uttrycket sin x + 2 kan både tolkas som sin(x) + 2 och sin(x + 2). Parenteser gör att tvetydigheten försvinner.

Det finns också fall där etablerade programvaror bryter mot de gängse prioriteringsreglerna.

  • Uttrycket −3² utvärderas enligt gängse prioriteringsregler till −9, men vissa programvaror (så som Microsoft Excel, Google Sheets och LibreOffice Calc) ger istället värdet 9. Detta beror på att dessa programvaror prioriterar unära operatorer (så som negativtecknet) högre än binära operatorer (så som upphöjt till och även subtraktion).[3] Genom att använda parenteser kan skillnaderna undvikas.
  • Upprepade upphöjningar till markerat med insättningstecken (^) hanteras på olika sätt av olika programvaror. Wolfram Alpha och Google-sökning hanterar a^b^c som a^(b^c), i enlighet med hur   utvärderas, medan Microsoft Excel och MATLAB hanterar uttrycket som (a^b)^c.

Explicit prioritering av operatorerRedigera

Ur strikt matematisk mening genomförs varje operation alltid en i taget, och den ordning operationerna är tänkta att genomföras kan markeras explicit genom att använda parenteser för varje operator istället för att förlita sig på prioriteringsregler. Ett sådant uttryck kan exempelvis vara ((a · b) · c) · (−d), som säger att a och b ska multipliceras, resultatet sedan multipliceras med c, som sedan ska multipliceras med (−d).

Explicit prioritering av operatorer kan vara användbart vid beräkningar med annat än reella tal där principer som kommutativitet eller associativitet inte gäller: Om A, B och C är reella tal har uttrycket A + B + C samma värde oavsett första två eller sista två termerna adderas först, men detta behöver inte gälla om A, B och C är andra typer av element. Explicit prioritering av operatorer kan också vara användbart när datorer ska utvärdera eller bearbeta uttryck.

Operatorprioritet i programmeringRedigera

Olika programspråk använder olika regler för operatorprioritet. Tabellen nedan avspeglar prioritet som används i många C-liknande programspråk.

1 ()   []   ->   .   :: Funktionsanrop, arrayåtkomst, etc.
2 !   ~   -   +   *   &   sizeof   type cast   ++   --   De flesta unära operatorerna, typomvandling, etc.
3 *   /   % MOD Multiplikation, division och modulo
4 +   - Addition och subtraktion
5 <<   >> Bitvis skiftning höger och vänster
6 <   <=   >   >= Jämförelseoperatorer: större/mindre än
7 ==   != Jämförelseoperatorer: lika med och inte lika med
8 & Bitvis AND
9 ^ Bitvis XOR
10 | Bitvis OR
11 && Logisk AND
12 || Logisk OR
13 ? : Villkorat uttryck (ternary operation)
14 =   +=   -=   *=   /=   %=   &=   |=   ^=   <<=   >>= Tilldelningsoperatorer
15 , Komma

Se ävenRedigera

ReferenserRedigera

  1. ^ Matematiktermer för skolan (1. uppl). Nationellt centrum för matematikutbildning (NCM), Göteborgs universitet. 2008. ISBN 978-91-85143-12-2. OCLC 489124236. https://www.worldcat.org/oclc/489124236. Läst 21 april 2021 
  2. ^ Bronštejn, Ilʹja N. (1985). Taschenbuch der Mathematik [Hauptbd..] (22. Aufl). ISBN 978-3-87144-492-0. OCLC 180385800. https://www.worldcat.org/oclc/180385800. Läst 21 april 2021 
  3. ^ ”Formula Returns Unexpected Positive Value”. Microsoft. 19 april 2015. https://web.archive.org/web/20150419091629/https://support.microsoft.com/en-gb/kb/kbview/132686. Läst 21 april 2021.