Uttryck & Operatorer

OBS: Läs först avsnittet om variabler så att ni förstår allt. .

Uttryck (expressions)

X + 69 är ett uttryck. Låt oss analysera uttrycket för att se vad det består utav.

X                          +                            69

<variabel>        <Operator>     <värde/data>

Jag antar att det här förklarar sig självt då en variabel är en behållare som innehåller data/värde. Operatorn är en symbol (i detta fall en matematisk operator). Vi kommer återkomma till Operatorer strax.

Operander

Föregående uttryck består av två operander. Både variabeln och värdet/datan är operander.

X                          +                            69

<operand>      <Operator>     <operand>

Unära, binära, ternära operatorer

Alla operatorer kan delas in i tre olika huvudgrupper: Unär (unary), Binär (binary), Ternär (ternary). Operatorerna delas in i dessa beroende på hur många operander som operatorn hanterar. Unär hanterar en operand, Binär hanterar två operander, och Ternär hanterar tre operander.

Vi börjar med att titta på några exempel på uttryck med binära operatorer.

x+69                   x69                    x= x69

Vi jämför dessa med några exempel på uttryck med Unära operatorer.

x= x                   x ++

 

Tilldelningsoperator (assignment operator)

Vi har redan (i avsnittet om variabler) lärt oss vad = innebär i C#. Detta är en operator. Den tillhör kategorin binära. Ett exempel följer:

X                            =                       69

<operand>      <operator>      <operand>

 

Jämförelseoperatorer (relational operators)

Jämförelseoperatorer är alla operatorer som jämför två operander med varandra. Operanden hamnar således under kategorin binära. Dessa ger som svar TRUE eller FALSE. Jämförelseoperatorer används i IF-satser.

Låt säga att X innehåller talet 69 (x=69). Som svar kommer ni få sant eller falskt.

Då kan vi kolla:

  • om X och 69 är samma tal (x == 69)?                            TRUE
  • om X och 69 INTE är samma tal (x!=69)?                    FALSE
  • om X är mindre än 69 (x<69)?                                          FALSE
  • om X är större än 69 (x>69)?                                            FALSE
  • om X är mindre eller samma som 69 (x<=69)?         TRUE
  • om X är större eller samma som 69 (x>=69)?           TRUE

Matematiska operatorer (Mathematical operators)

Matematiska operatorer är de operatorer som kan utföra matematiska uppgifter. Jag visar här både unära och binära operatorer.

Operatorerna + och – är båda två unära och binära. Skrivs + och – som unära ser det ut som följande:

y = +2 (vilket innebär att y är 2) (y = +x)

y = -2 (vilket innebär att y är -2) (y = -x)

+ och – som binära ser ut som följande:

y = 2 + 1 (vilket innebär att y är 3) (y = x + z)

y = 2 – 1 (vilket innebär att y är 1) (y = x – z)

Sedan har vi * (multiplikation) och / (division). Dessa är båda två binära.

y = 2*1 (vilket innebär att y är 2) (y = x * z)

y = 2/1 (vilket innebär att y är 2) (y = x / z)

En varningens finger höjs för division och datatypen int. Gäller divisionen tal som kommer att resultera i flyttal (exv. 1/2 vilket ger 0.5) då datatypen är int så kommer resultatet att avrundas!

Operatorerna ++ och – – är unära, men finns i två varianter; som suffix och prefix. Operatorn ++ innebär att man lägger till 1 till talet/variabelns värde.

Suffix är när operatorn kommer efter talet eller variabeln, medan prefix är när operatorn kommer före talet/variabeln. I uttrycket y = 1++ är operatorn ++ ett SUFFIX då det kommer EFTER talet 1. I uttrycket y = ++1 är operatorn ++ ett PREFIX då det kommer FÖRE talet 1.

Uttrycket y = ++2 adderar 1 till talet 2 för att sedan tilldela det totala talet (3) till y. Uttrycket y = 2++ tilldelar y 2 för att sedan addera 1 till talet 2 så att talet blir 3.

I följande exempel är x=2

y=++x                y= (1+x)            (y=3)

x beräknas alltså innan det sätts in i (=) y

y=x++                (y =x)++            y=(x+1)

y tilldelas (=) alltså innan x beräknas

Samma prefix-/suffix-regel gäller för operatorn —

y=–x (subtraherar x med 1 innan x sätts in i y)

y=x –(x sätts in i y innan värdet i x subtraheras)

Utöver dessa finns även en matematisk operator som kallas för modulus, operatorn ser ut så här: % . Det % gör är att placera det överblivna värdet i variabeln som ska tilldelas.

Uttrycket y = 7%2 ger y ett värde på 1. 2 går att placera 3 gånger i 7, det vi får över är 1. 1 placeras sedan i y.

Operatorerna +=, -=, *=, /= är alla förkortade uttryck. Ofta när man vill addera/subtrahera/multiplicera/dividera ett existerande värde (y) med ett nytt värde (x) skrivs det som:

y=y+x (y adderas först med x, y tilldelas sedan resultatet av additionen). Detta går att skriva mycket snabbare genom att skriva y+=x.

y+=x är alltså samma som att skriva y=y+x, bara kortare. Resten av operatorerna som beskrevs som förkortade uttryck fungerar på samma sätt. Vidare kan tilläggas att dessa är binära operatorer.

Logiska operatorer

Operatorerna !, &&, ||, ^ är logiska operatorer. Dessa operatorer motsvarar NOT, AND, OR, XOR. Dessa används oftast då vi ska utvärdera om ett uttryck eller flera är TRUE eller FALSE, oftast i samband med IF-satser eller dylikt.

  • ! (NOT – INTE)
  • && (AND – OCH)
  • || (OR – ELLER)
  • ^ (XOR – XELLER)

Exempel på ett uttryck där vi använder oss av &&:

if((x==69) && (y==2))             ”om x är SANT och y är SANT är uttrycket SANT, annars FALSKT”

if((x==69) || (y==2))                ”om x är SANT eller y är SANT är uttrycket SANT, annars FALSKT”

if((x==69) ^ (y==2))                 ”Om x är SANT och y är FALSKT (eller tvärtom) är uttrycket SANT, annars FALSKT”

if(!(x==69))                                   “Om x INTE är 69 så är uttrycket SANT, annars FALSKT”

Genom att använda oss av Logiska operatorer kan vi tydliggöra och bygga relativt precisa krav på kriterier som måste vara uppfyllda innan en viss kod kan utföras.

 

Operatorhierarkin

Viktigt att hålla koll på! Räkna inte bara från vänster till höger. Precis som när vi löser matematikuppgift så måste vi ta hänsyn till var vi börjar räkna.

Multiplikation har en högre prioritet i hierarkin än addition när vi ska beräkna ett tal, börjar vi med addition blir svaret fel.

Exempel:

RÄTT: x = 5+5*3 [->] x = 5 + 15 [->] x = 20

FEL:    x = 5+5*3 [->] x = 10*3 [->] x = 30

Så precis som i matematiken är det riktigt viktigt att hålla koll på den hierarkiska ordningen av alla operatorer. Vi börjar med de operatorer som har högst prioritet (dvs. de som datorn kommer att beräkna först) fallande till de med lägst prioritet.

 

Högst prioritet

  • [PREFIX]++, –, ( ), [Unära] +, –
  • *, /, %
  • +, –
  • <, >, <=, >=
  • ==, !=
  • =, *=, /=, %=, +=, -=
  • [SUFFIX]++, —

Lägst prioritet