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

    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

    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

    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:

    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 -->

    Søk på siden

    © Lilleholt.no 2020
    Free Joomla! templates by Engine Templates