
			     OPERATORER 


Nr vi s har lyckats att plja igenom de flesta av datatyperna i C kan det
vara p sin plats att se lite nrmare p vad man kan gra med dem. Vi gr 
allts igenom de olika operatorerna. Lt oss brja med en ngorlunda komplett
tabell, ordnad efter prioritet;

Operator                                Placering

()  {}  ->  .                           V - H

!  ~  ++  --  -  (typ)  *  &  sizeof    H - V   OBS! Unra operatorer!

*  /  %	                                V - H

+  -                                    V - H

<<  >>                                  V - H

<  <=  >  >=                            V - H

==  !=                                  V - H

&                                       V - H

^                                       V - H

|                                       V - H

&&                                      V - H

||                                      V - H

?:                                      V - H

=  +=  -=  *=  /=  %=                   H - V

,                                       V - H


Det hr fordrar en del frklaringar. Vi frsker gruppera operatorerna i 
ngon logisk ordning.

Aritmetiska operatorer:

-       Som unr (enstllig) operator s skiftar den tecken p vrdet till 
        hger om operatorn. Detta r INTE detsamma som subtraktion!

-       Subtraktion av vrdet till hger frn vrdet till vnster. Operatorn
        r hr binr, allts tvstllig, med en operand p var sida.  

+       Adderar vrdet till hger till vrdet till vnster.

*       Multiplicerar vrdet till hger med vrdet till vnster.

/       Dividerar vrdet till vnster med vrdet till hger. Om bda vrdena
        r av heltalstyp kortas svaret av till heltal ocks.

%       Ger resten nr vrdet till vnster divideras med vrdet till hger.
        Bda operanderna mste vara av heltalstyp.

++      Adderar 1 till vrdet av variabeln till hger (prefixmetod) eller
        variabeln till vnster (postfixmetod).

--      Fungerar som ++ men subtraherar istllet.


Tilldelningsoperatorer

=       Variabeln till vnster tilldelas vrdet till hger om operatorn.
        Skilj noga denna operator frn relationsoperatorn ==  !!!

+=      Adderar det hgra vrdet till variabeln till vnster.

-=      Subtraherar det hgra vrdet frn variabeln till vnster.

*=      Multiplicerar variabeln till vnster med vrdet till hger.

/=      Dividerar variabeln till vnster med vrdet till hger och stter 
        vrdet p variabeln till resultatet av divisionen. Avkortning vid
        heltalsdivision.

%=      Dividerar som /= men stter variabelns vrde till resten vid divi-
        sionen. Tillten endast vid heltalsdivision.


Relationsoperatorer

Dessa operatorer bildar tillsammans med sina tv operander ett relationsut-
tryck som innebr att operanderna jmfrs. Om uttrycket r sant fr det vr-
det 1 och om det r falskt fr det vrdet 0. Observera att det r hela ut-
trycket som sdant som fr detta vrde.

<       Mindre n.

<=      Mindre n eller lika med.

==      Lika med. Skilj denna relationsoperator noga frn tilldelningsopera-
        torn =  !!! Relationsoperatorn r en jmfrelse mellan tv vrden, 
        tilldelningsoperatorn tilldelar ett vrde till en variabel.

>=      Strre n eller lika med.

>       Strre n.

!=      Inte lika med.


Logiska operatorer

Logiska operatorer har oftast relationsuttryck som operander. Det finns dock
inget som hindrar att logiska operatorer verkar p uttryck av godtycklig typ.
Vrdet 0 eller 0.0 rknas d som falskt och allt annat som sant. Resultatet
av en logisk operation r alltid heltalet 0 eller 1. 

&&      Logiskt OCH, uttrycket r sant om och endast om bda operanderna
        r sanna, annars r uttrycket falskt.

||      Logiskt ELLER, uttrycket r sant om minst en av operanderna r sann,
        uttrycket r falskt om och endast om bda operanderna r falska.

!       Logiskt INTE, uttrycket r sant om operanden r falsk och tvrtom. 
        Denna operator r unr och str till vnster om operanden.
 

Pekaroperatorer

&       Adressoperatorn, nr den appliceras p en variabel s ger den som
        resultat adressen till variabeln. Uttrycket &Kalle betyder adressen
        till variabeln Kalle.

*       Den indirekta operatorn, nr den appliceras p en pekare ger den det
        vrde som r lagrat i den adress som pekaren pekar p. Uttrycket 
        *Kallepek ger allts, om Kallepek pekar p Kalle, vrdet p Kalle.


Strukturoperatorer

.       Elementoperatorn, den anvnds fr att identifiera ett element i en
        struktur eller en union. Om bil r namnet p en struktur och motor
        r ett element s identifieras detta element som bil.motor.

->      Den indirekta elementoperatorn anvnds om strukturen refereras med
        en pekare i stllet fr strukturens namn. Om Volvo r en pekare mot
        strukturen bil s r Volvo->motor ett stt att identifiera elementet
	motor i denna struktur.

Fr att ytterligare rra till det s kan vi ocks applicera den indirekta 
operatorn p strukturpekaren och konstatera att fljande tre uttryck r ekvi-
valenta:
        Volvo->motor		bil.motor		(*Volvo).motor


Diverse operatorer

sizeof  Applicerad p en operator till hger ger den storleken i bytes p
        operatorn. Denna kan till exempel vara en variabel eller en lista
        eller en struktur. Den kan ocks vara en typangivelse, som d ska st
        inom parentes. Exempel sizeof(int), sizeof bil.

(typ)   Styroperatorn. Den omvandlar det efterfljande vrdet till den typ 
        som anges inom parentesen. Exempel: (float)11 kommer att omvandla
        heltalet 11 till flyttalet 11.0.

,       Kommateckensoperatorn anvnds fr att sammankoppla ett antal uttryck
        och garantera att de berknas i den ordning de str frn vnster till
        hger. Vidare ser den till att vrdet av uttrycket fr vrdet av det
        sista deluttryck som avskiljs med operatorn.

?:      Villkorsoperatorn har tre operander som alla tre r uttryck och 
        skrivs s hr:
                uttryck 1 ? uttryck 2: uttryck 3
        Vrdet p hela villkorsuttrycket  blir vrdet av uttryck 2 om uttryck
        1 r sant och vrdet av uttryck 3 om uttryck 1 r falskt.


Bitvisa operatorer

~       Bitvis negering. Varje bit i operanden som r 1 stts till 0 och 
        varje 0 stts till 1. Exempel:

                ~(11001001) == (00110110)

&       Bitvis OCH. Denna operator r tvstllig och jmfr operanderna bit
        fr bit. Resultatet blir 1 om och endast om motsvarande bitar i bda
        operanderna r 1. Exempel:

                (11001001) & (01000011) == (01000001)

        Samma exempel kan skrivas som:

                201 & 67 == 65

|       Bitvis ELLER. Denna operator r tvstllig och jmfr operanderna bit
        fr bit. Resultatet blir 1 om minst en av motsvarande bitar i bda
        operanderna r 1. Exempel:

                (11001001) | (01000011) == (11001011)

        Samma exempel kan skrivas som: 

                201 | 67 == 203

^       Bitvis EXELLER. Denna operator r tvstllig och jmfr operanderna 
        bit fr bit. Resultatet blir 1 om en men inte bda av motsvarande 
        bitar i bda operanderna r 1. Exempel:

                (11001001) ^ (01000011) == (10001010)

        Samma exempel kan skrivas som:

                201 ^ 67 == 138

<<      Vnsterskift. Denna operator r tvstllig och flyttar bitarna i den
        vnstra operanden s mnga steg till vnster som anges av operanden
        till hger. Utskiftade bitar frloras och tomma positioner till hger
        fylls med nollor. Denna operation r en effektiv metod fr att multi-
        plicera med potenser av 2. Exempel:

                (00010110) << 2 == (01011000)

        Samma exempel kan skrivas som:

                22 << 2 == 88

>>      Hgerskift. Denna operator t tvstllig och flyttar bitarna i den 
        vnstra operanden s mnga steg till hger som anges av den hgra
        operanden. Utflyttade bitar frloras. Vad som hnder med tomma posi-
        tioner beror p talets typ och p maskinen. Typen unsigned kommer
        alltid att fyllas med nollor, medan teckensatta typer antingen fylls
        med nollor eller med kopior av den vnstra biten, som ju r tecken-
        bit. Exempel med typ unsigned:

                (10011101) >> 2 == (00100111)

        Samma exempel kan skrivas som:

                157 >> 2 == 39
