Sammenligning


Sammenligning

Operatorer for sammenligning i C og C++ fungerer stort sett som overalt ellers, med et par viktige unntak. Den mest spesielle er «er lik»-operatoren:

Hvis vi skriver if (teller=10) , vil variabelen «teller» settes til verdien 10, i stedet for å sammenlignes med 10. Dette kan være en vanskelig logisk feil å finne i et program, i og med at det er gyldig kode og du får dermed ingen feilmelding.

Vi må skrive if (teller == 10) for å få ønsket resultat, altså dobbel =

Den andre spesielle er «forskjellig fra»-operatoren, som skrives !=

Utropstegnet betyr her (som ellers) ikke eller not.

Ellers er det ikke noe spesielt med de andre operatorene:

>   større enn
>=  større enn eller lik
<   mindre enn
<=  mindre enn eller lik

Aritmetikk


Aritmetikk

Pluss, minus, ganger og deling (+ - * / ) fungerer som forventet.

Ved deling av integer-verdier vil alt bak komma forsvinne.

I tillegg har vi modulus-operatoren: %  Denne vil gi resten av en divisjon som svar. For eksempel vil 5%2 gi svaret 1 som er resten, når vi deler 5 på 2.

C har også 2 spesielle operatorer for å øke en verdi med 1 eller redusere en verdi med 1: ++ og --

Disse brukes ofte for å oppdatere tellere, for eksempel i en loop:

teller++;   og    teller+=1; er det samme som teller=teller+1;

Tilsvarende er:

teller--;  og  teller-=1; det samme som teller=teller-1;

 

Logiske operatorer


Logiske operatorer

Vi har 3 logiske operatorer:

&&  - logisk OG  (AND)

||  - logisk ELLER (OR)

!   - IKKE  (NOT)

Eksempel:

if (teller>0 && teller<20) { gjør noe }

if (teller<0 || teller>20) { gjør noe annet }

if (!teller) { gjør noe hvis teller er nøyaktig null }

- Merk!  Bare 0 er usann. -1, 0.00001 eller 123 er for eksempel også «sant» her…

Binære operatorer


Binære operatorer

Når vi arbeider med mikrokontroller har vi ofte bruk for binære operatorer.

I motsetning til de logiske operatorene && og || brukes disse bit for bit.

Operatorene er:

&    bitvis OG (AND)
|  bitvis ELLER (OR)
^    bitvis Eksklusiv ELLER (XOR)
~  invertering (NOT)
<<   skift venstre (shift left)
>>  skift høyre (shift right)
Vi skal se på eksempler på hver av disse.

Bitvis OG: &

Vi har 2 verdier: A = 60; og B = 13; i binær for vil tallene være slik:

A = 0011 1100

B = 0000 1101

A&B; vil da bli:

0000 1100

Bitvis ELLER: |

Vi har 2 verdier: A = 60; og B = 13; i binær for vil tallene være slik:

A = 0011 1100

B = 0000 1101

A|B vil da bli:

0011 1101

Bitvis XOR: ^

Vi har 2 verdier: A = 60; og B = 13; i binær for vil tallene være slik:

A = 0011 1100

B = 0000 1101

A^B vil da bli:

0011 0001

Bitvis NOT: ~

Vi har 2 verdier: A = 60; og B = 13; i binær for vil tallene være slik:

A = 0011 1100

B = 0000 1101

~A vil da bli:

1100 0011

~B vil bli:

1111 0010

Shift left: <<

Vi har 2 verdier: A = 60; og B = 13; i binær for vil tallene være slik:

A = 0011 1100

B = 0000 1101

A<<2 vil da bli:

1111 0000  (Shift left 2 ganger)

B<<3 vil bli:

0110 1000  (Shift left 3 ganger)

Shift right: >>

Vi har 2 verdier: A = 60; og B = 13; i binær for vil tallene være slik:

A = 0011 1100

B = 0000 1101

A>>2 vil da bli:

00001111  (Shift right 2 ganger)

B>>3 vil bli:

0000 0001  (Shift right 3 ganger)

 

Oppgaver


Oppgaver:

Oppgave 1:
Opprett 3 heltalls-variabler, tall1, tall2 og svar. Bruk disse til å teste ut aritmetikk-operatorene vi har gått gjennom. Skriv ut svarene til Serial Monitor. Litt mer jobb, men du kan gjerne skrive ut selve regnestykkene også.

Oppgave 2:
Opprett en variabel tall, som du i utgangspunktet setter til 16. Test ut hva som skjer når du bruker Shift left << og Shift right >> på dette tallet. Hvilken matematikk-operasjon tilsvarer hhv. Shift left og Shift right?

 

 

Neste artikkel -->