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 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; 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… 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 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) Oppgave 1: Oppgave 2: Sammenligning
Sammenligning
>= større enn eller lik
< mindre enn
<= mindre enn eller likAritmetikk
Aritmetikk
Logiske operatorer
Logiske operatorer
Binære operatorer
Binære operatorer
| 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.Oppgaver
Oppgaver:
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å.
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?
- Detaljer
- Skrevet av: Per Sigbjørn
- Kategori: Operatorer
- Treff: 2611