float Mindre rella tal ( floating point number ) double Rella tal/flyttal ( double precision floating point number )

Relevanta dokument
1 Datorn som miniräknare. 1.1 Räkneoperationer. 1.2 Variabler

Introduktion till programmering

TDIU01 - Programmering i C++, grundkurs

Enkla datatyper minne

System.out.println("Jaså du har "+ antalhusdjur+ " husdjur"); if ( antalhusdjur > 5 ) System.out.println("Oj det var många);

En villkorssats är den konstruktion som finns i C++ för att göra en selektion av två alternativa sekvenser. Formen för if satsen är

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

1 Funktioner och procedurell abstraktion

TDIU01 - Programmering i C++, grundkurs

Föreläsning 7. Nyckelord I Java. Uttryck. Uttryck, Operatorer Och Kontrollflöden

E02 "The Review" Föreläsning 2, HT2013 Grunderna, repetition. Johan Leitet. Kurs: 1dv403 Webbteknik I

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Programmeringsteknik med C och Matlab

Programmering A. Johan Eliasson

Objektorienterad programmering Föreläsning 4

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

F4. programmeringsteknik och Matlab

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Klassdeklaration. Metoddeklaration. Parameteröverföring

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

SMD 134 Objektorienterad programmering

Objektorienterad Programmering (TDDC77)

C++ - En introduktion

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

Data, typ, selektion, iteration

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT / 26

Inledande programmering med C# (1DV402) 27+15=42 1 (22)

Objektorienterad Programmering (TDDC77)

Parameteröverföring. Exempel. Exempel. Metodkropp

Översikt Introduktion DST 1. Nicholas Wickström. IDE, Högskolan i Halmstad. N. Wickström

1 Texthantering. 1.1 Typen char. Exempel, skriv ut alfabetet

Lathund. C för inbyggda system

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

PROGRAMMERING 2 GRUNDLÄGGANDE SEMANTIK 4

TDDC77 Objektorienterad Programmering

TDDC76 - Programmering och Datastrukturer

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

Del3 Klassanvändning, operatorer och pekare Ämnesområden denna föreläsning:

DD1314 Programmeringsteknik

Heltalsrepresentation. Fler byggstenar. Overflow och Underflow. TvŒ-komplement. FlyttalsvŠrden. Fyra heltalstyper. Tecken-bit

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera

Lathund. C för inbyggda system

TDIU01 - Programmering i C++, grundkurs

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

OBS! All teori i detta och följande dokument kompletteras med genomgångar på lektionerna. Så det är viktigt att närvara och göra egna anteckningar.

C konstruerades i början på sjuttiotalet av Dennis Ritchie vid Bell Laboratories.

GRUNDER I VHDL. Innehåll. Komponentmodell Kodmodell Entity Architecture Identifierare och objekt Operationer för jämförelse

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Instuderingsfrågor till Steg 1

2D1387, Programsystemkonstruktion med C++ Johnny Bigert, Kursens hemsida:

Introduktion C-programmering

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

Programmering för språkteknologer I, VT2012. Rum

1 Iteration. 1.1 for-satsen

Övning2. Variabler. Data typer

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Repetition C-programmering

DD1310/DD1314/DA3009 Programmeringsteknik LÄRANDEMÅL... Vilka läser kursen? ...FLER LÄRANDEMÅL. Föreläsning 1

C++ - En introduktion

Operatoröverlagring. endast operatorsymboler definierade i C++ kan överlagras = += -= *= /= %= ^= &= = <<= >>= < > <= >= ==!= && > ->*, [ ] ( )

Övningsuppgifter till föreläsning 2 Variabler och uttryck

Lathund. Pacific C för MS-DOS

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Logik och kontrollstrukturer

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

TDIU01 - Programmering i C++, grundkurs

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Programmering B med Visual C

Grundläggande programmering med C# 7,5 högskolepoäng

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Generiska konstruktioner. Kursbokens kapitel 13

Programmering i C++ EDA623 Typer. EDA623 (Föreläsning 4) HT / 33

+LVWRULHQ. .XUVLQQHKnOO 2EMHNWRULHQWHUDGSURJUDPXWYHFNOLQJ ª 2EMHNWRULHQWHUDGDQDO\V ª 2EMHNWRULHQWHUDGGHVLJQ ª 2EMHNWRULHQWHUDGSURJUDPPHULQJ

C++-programmets beståndsdelar

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

TDDC77 Objektorienterad Programmering

Byggstenar. C++-programmets beståndsdelar. C++-programmets beståndsdelar. Grundläggande datatyper

Programmeringsteknik I

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Föreläsning 2 - Intro till Java

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

Variabler använder man sig av för att under programkörningen spara data eller information i primärminnet. En variabel har typ, namn och värde.

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

LÖSNINGSFÖRSLAG TENTAMEN

Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs

Innehåll. Typomvandlingar (casting) Implicita Typomvandlingar. Typomvandlingar (type casts) Explicita, namngivna typomvandlingar (C++-11)

TDIU01 (725G67) - Programmering i C++, grundkurs

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Studentportalen UNIX-konton (systemansvariga P4118) Lärare: Tom Smedsaas,

Transkript:

1 Datatyper och Uttryck I räkneprogrammet tidigare såg vi att C++ kräver deklarationer av alla variabler som används. I räkneprogrammet användes bara variabler av heltalstyp, int, men det finns naturligtvis andra typer av variabler som kan användas i C++. I kompendiet "Datorsystem och programhantering" finns ett kapitel om intern datarepresentation som med fördel läses innan detta avsnitt. 1.1 Datatyper De vanligaste datatyperna är int Heltal ( integer ) short int Mindre heltal ( short integer ) long int Stort heltal ( long integer ) float Mindre rella tal ( floating point number ) double Rella tal/flyttal ( double precision floating point number ) char Tecken ( character) bool Logiskt värde ( boolean ) void Tomrum/ingenting För variationerna long int och short int kan ordet int utelämnas. För heltalstyperna och teckentypen char finns även en icke teckensatt form som anges med unsigned unsigned int unsigned short int unsigned char unsigned int a; a = 3; Dessa datatyper kallas med ett gemensamt namn för enkla datatyper. En variabel som deklareras som unsigned kan inte anta negativa värden. Dvs satserna: Ger ett oväntat resultat. 1.2 Deklarationer Deklarationer görs alltid på formen datatyp variabelnamnslista;

En variabelnamnslista består av ett eller flera variabelnamn åtskilda av kommatecken. En lista är ett återkommande begrepp som omfattar fler saker än just variabelnamn. Generellt är en lista noll, ett eller flera element åtskilda av kommatecken. 1.3 Identifierare Det finns flera typer av identifierare där variabelnamn är en av dessa typer. De variabelnamn vi sett hittills har varit enstaka bokstäver, C++ tillåter emellertid ganska utförliga namn på variabler. Ett annat exempel på identifierare är funktionsnamn tex. main Reglerna för namngivning av identifierare är Det första tecknet måste vara en bokstav eller tecknet '_' (understreck/ underscore). Efterföljande tecken kan vara bokstäver eller siffror Tecknen å, ä och ö är ej tillåtna Namnen kan vara i princip hur långa som helst. 4096 tecken är en vanlig övre gräns. 1.3.1 Godkända identifierare / variabelnamn hello HeLlO _x _12 _hello_dude_2 number_of_variables_in_my_program Observera att man skiljer på versaler och gemener i identifierare. Variabeln a är inte samma variabel som variabeln A. 1.3.2 Icke godkända identifierare 2dudes man får inte börja med en siffra hello dude mellanslag är inte tillåtna i variabelnamn x y tecknet är ej tillåtet "hel" " är inte tillåtet, anger dessutom texten hel poäng ä är inte ett tillåtet tecken När man skriver ett C++ program är det inte tillåtet att använda åäö i variabelnamn. Det kan därför vara en smula bökigt att använda svenska ord som variabelnamn, även fast det kan vara enklare att associera svenska ord med olika betydelser i programmet. Författaren använder av den anledningen uteslutande engelska identifierare i "skarp" programkod. Det är dessutom en betydande del av jordens befolkning som inte förstår svenska variabelnamn. I detta kompendium har jag däremot försökt att använda mig av identifierare med svenska namn för enkelhetens skull.

1.3.3 Initieringssatser En initiering är att ge en deklarerad variabel ett startvärde. Då en variabel deklareras med ex. int i; har variabeln i ett okänt startvärde. För att i ska få ett meningsfullt värde måste man göra en tilldelning. En variation på tilldelningar är initieringar, som är en kombination av en deklaration och en tilldelning. Syntaxen ser ut som datatyp variabelnamn = startvärde; 1.3.4 Exempel på giltiga satser med variabeldeklarationer och intieringar int n; int i, j; double x; // i, j är en variabellista med två element // x deklareras som ett flyttal unsigned long int number_of_paalokas, number_of_cards; // två positiva heltalsvariabler deklareras bool logic_1, logic2, illogical; // tre variabler som kan anta värdet sant och falskt char c; // variabel som innehåller tecken ex 'A' double my_float_number = 2.3203; variabel // initierad int magic_number = 42; // initierad variabel Då man väljer variabelnamn för variabler i programmet ska man se till att använda så utförliga namn som möjligt. 1.3.5 Nyckelord Det finns i språket en uppsättning fördefinierad ord med speciella betydelser som inte får användas som identifierare, dessa kallas nyckelord. asm auto bad_cast bad_typeid bool break case catch char class const const_cast continue default delete do double dynamic_cast else enum except explicit extern false finally float for friend goto if inline int long mutable namespace new operator private protected public register reinterpret_cast return short signed sizeof static static_cast struct switch template this throw true try type_info typedef typeid typename union unsigned using virtual void volatile while 1.3.6 Datatypernas egenskaper Man använder variabler av olika datatyper till olika syften, och man måste välja datatyp med omsorg då man deklarerar sina variabler.

1.3.7 Lagring av enkla datatyper I en 32 bitarsmiljö ( vanlig processor ) lagras heltalstyperna enligt char, unsigned char, signed char 1 byte short, unsigned short 2 bytes int, unsigned int 4 bytes long, unsigned long 4 bytes float 4 bytes double 8 bytes Då en variabel av typen int lagras i datorns minne kommer den således att uppta 4 bytes minne. Man kan enkelt räkna fram vilka talområden detta ger för heltalstyperna om man följer metoden i kompendiet "Datorsystem och programhantering", avsnitt intern datarepresentation. Samma avsnitt anger dessutom hur talområdet för flyttalen ska tolkas. char + 127 short + 32 767 int + 2 147 483 647 long + 2 147 483 647 float E+ 37, 6 siffrors noggrannhet double E+ 308, 15 siffrors noggrannhet Heltalstyperna är de enklaste av datatyperna. Det är ofta tydligt när man ska använda sig av heltalstyper. Flyttalstyperna kan vara lite krångligare men med lite vana blir även det en ganska smal sak. Exempel räkneprogram med olika datatyper

#include<iostream> using namespace std; int main() { int antal_bananer, antal_apelsiner; double medel_antal; antal_bananer = 89; antal_apelsiner = 56; medel_antal = (antal_bananer + antal_apelsiner) / 2.0; } cout<<"du har i snitt "<< medel_antal << " frukter av varje sort"<<endl; return 0; Det är en god vana att använda beskrivande variabelnamn. Notera att det går utmärkt att använda åäö i texter, inom citat tecken. Rad 1 5 är de vanliga satserna för att påbörja huvudprogrammet. Rad 6 skapar två heltal med namnen antal_bananer och antal_apelsiner. Rad 7 skapar ett flyttal, dvs ett tal med decimaldel som ex 3.14159265. Flyttalet medel_antal deklareras som double trots att talområdet för float mer än väl räcker till. Motivet till att välja float skulle vara att en double ansågs ta upp för mycket minne. Floatdeklarationen påverkar emellertid ytterst sällan programmets storlek i någon väsentlig grad, därför väljer man alltid double av bekvämlighet. Rad 9 och 10 är vanliga tilldelningar. Rad 12: medel_antal = (antal_bananer + antal_apelsiner) / 2.0; Parenteser används för att additionen ska utföras innan divisionen (annars blir det ju inget medelvärde). Därefter sker division med 2.0. Det inskrivna värdet 2.0 ska betraktas som att vara av typen float medan ett värde skrivet som 2 ska betraktas som att vara av typen int. Prova att ändra värdet 2.0 till värdet 2. Blir det någon skillnad vid programkörning? Rad 14: cout<<"du har i snitt "<<medel_antal<< " frukter av varje sort"<<endl; Här verkar utströmsoperatorn på en variabeln medel_antal som är av typen double, variabeln skrivs därför ut som ett flyttal till skärmen. Längre fram i programmeringsstudierna är det viktigt att inse skillnaden mellan den interna representationen av heltal och flyttal (dess bitmönster i minnet) och dess representation på skärmen. På skärmen är det en textrepresentation som syns och i minnet är det en heltalsrepresentation respektive en flyttalsrepresentation som finns. Resultatet av programkörning blir

Medelpoõngen av dina prov õr 72.5 Press any key to continue Som synes innehåller 72.5 en decimaldel som inte hade kunnat erhållits om vi deklarerat medel_antal som heltal. (Tecknen åäö blir ofta förvanskade i konsolfönster. Det har att göra med att Windows och C++ är inte helt överens vilken teckentabell som ska användas.) 1.4 Uttryck och operationer Ett uttryck är en speciell syntaktisk konstruktion i C++. De flesta programsatser är i sig själva ett uttryck, eller innehåller ett uttryck. Vi har redan sett flera exempel på uttryck med operatorer. Vi har bland annat sett: Uttryck 1: antal_bananer = 89; och Uttryck 2: medel_antal = (antal_bananer + antal_apelsiner) / 2.0; och Uttryck 3: cout<<"variabeln a har värdet "; Deklarationssatserna räknas inte till uttryck Uttryck 1 och 3 är enkla uttryck medan uttryck 2 är ett sammansatt uttryck. Vi kan se att de enkla uttrycken 1 och 3 består utav en operator, = för 1, << för 3, och två operander vardera. antal_bananer och 89 är operanderna för Uttryck 1, cout och "variabeln a har värdet" är operanderna för uttryck 3. Det sammansatta uttrycket är flera hopslagna enkla uttryck. 1.4.1 Binära operationer Den vanligaste formen av enkla uttryck är just en binär operator och dess operander. Operatorn kallas binär eftersom den alltid behöver två operander. De binära operatorerna i C++ är:

Aritmetiska operatorer + Addition Subtraktion * Multiplikation / Division % Modulus += Addition med tilldelning = Subtraktion med tilldelning *= Multiplikation med tilldelning /= Division med tilldelning %= Modulus med tilldelning Strömoperatorer << Utströmsoperator >> Inströmsoperator Tilldelningsoperator = Tilldelning Logiska operatorer!= Icke lika med < Mindre än <= Mindre än lika med == Lika med > Större än >= Större än lika med && Logiskt AND Logiskt OR Bitoperatorer ^ Exklusivt OR & Bitvis AND Bitvis OR ^= Exklusivt OR med tilldelning &= Bitwise AND med tilldelning = Bitvis OR med tilldelning De enkla räkneoperatorerna har behandlats tidigare, förutom modulusoperatorn. Varje räkneoperator har en tilldelningsvariant, exempelvis har + operatorn en variant +=. Denna operator är en ren bekvämlighet. I program stöter man ofta på situationer när en variabel ska öka eller minska i värde. Exempelvis

int i; i = 65; cout << " i har nu värdet 65 "<< endl; i = i + 8; cout << " i har nu värdet 73 "<< endl; Exemplet är ett lösryckt programavsnitt som måste fogas in i main() funktionen för att fungera som program. Rad 4 i exemplet kan man alltså läsa ut som: Tilldela variabeln i det tidigare värdet på i plus 8. Mer korrekt ses satsen som att den består utav två operationer, där operation 1 är i + 8 med resultatet 73 av typen int, operation 2 är i = 73, i tilldelas värdet 73. Att öka värdet på en variabel på detta sätt är så vanligt att man har skapat en operator som utför denna sammansatta sats i en enda operation +=. Det lösryckta programavsnittet ovan omskrivet med += operatorn ser då ut som int i; i = 65; cout << " i har nu värdet 65 "<< endl; i += 8; cout << " i har nu värdet 73 "<< endl; En marginell skillnad kan tyckas, men man lär sig snabbt att trivas med detta skrivsätt. Dessutom blir det väldigt tydligt då man läser programkoden. Fler exempel på räkneoperatorer kombinerade med tilldelning int i; i = 65; cout << " i har nu värdet 65 "<< endl; i = 15; cout << " i har nu värdet 50 "<< endl; i /= 5; cout << " i har nu värdet 10 "<< endl; i *= 2; cout << " i har nu värdet 20 "<< endl; Modulusoperatorn kan tänkas vara en ny bekantskap. En modulusoperation beräknar resten vid heltalsdivision. Heltalsdivision får man då man dividerar två värden av typen int och anger resultatet som ett heltal, ex 7 / 2 = 3. Divisionen 7 / 2 går inte jämt upp utan det korrekta svaret borde varit 7 / 2 = 3.5. Men eftersom det är fråga om heltalsdivision anger man inte decimaldelen av kvoten utan bara heltalsdelen. Istället anger man en rest för den del av kvoten som inte gick jämt upp som 7 / 2 = 3 rest 1. Resten kan beräknas ur heltalskvot * nämnare + rest = täljare, eller rest = täljare heltalskvot * nämnare. Modulusoperatorn har ett antal speciella användningsområden som kommer att framgå senare av exempel.

1.4.2 Unära räkneoperatorer Det finns ytterligare aritmetiska operatorer som är av unär typ. Dessa operatorer tar alltså bara en operand. ++ prefix inkrement, operator placeras före operand ++ postfix inkrement, operator placeras efter operand prefix dekrement, operator placeras före operand postfix dekrement, operator placeras efter operand Dessa operatorer ökar respektive minskar värdet på en numerisk variabel med ett. Den prefixa varianten sätts före variabelnamnet och den postfixa sätts efter variabelnamnet. int a; a = 8; ++a; // prefix cout << a har värdet 9"<<endl; a++; // postfix cout << a har värdet 10"<<endl; a; // prefix a ; // postfix cout << "a har värdet 8"<<endl; Skillnaden mellan prefix och postfix märks först om man sätter in operationerna i sammansatta uttryck. Den prefixa operationen ger som resultat det värde som variabeln har efter operationen, den postfixa ger det värde variabeln hade före operationen. int a; int i; a = 8; i = ++a; // prefix ++a utvärderas till värdet 9 cout << a har värdet 9 och i har värdet 9"<<endl; i = a++; // postfix ++a utvärderas till värdet nio cout << a har värdet 10 och i har värdet 9"<<endl; i = a; // prefix uttrycket a ger värdet 9 i = a ; // postfix uttrycket a ger värdet 9 cout << "a har värdet 8 i har värdet 9"<<endl; Det som är skrivet i programkoden ovan efter tecknen // är kommentarer. En kommentar som skrivs på en rad startar med // och slutar då raden slutar. Det som står efter kommentartecknen kommer kompilatorn inte att bry sig om. Kommentarer står också ofta ensamma på en rad. int a; // Nu är variabeln a deklarerad. Kompilatorn bryr sig inte om denna rad Kommentarer är otroligt användbara som minnesanteckningar i programkod. Man kan även Skriva kommentarblock som sträcker sig över flera rader med symbolerna /* och */ ( observera ordningen). Tänk på att inte av misstag råka skriva några programsatser som ska utföras i ett kommentarblock.

int a; /* */ a = 8; Nu är variabeln a deklarerad. Kompilatorn bryr sig inte om raderna inuti kommentarblocket. Som tar slut nu. 1.4.3 Tolkning av uttryck Funktionen hos ett binärt uttryck bestäms exakt av dess operator och dess operanders datatyper. Exempelvis Uttryck 1: antal_bananer = 98; Tilldelningsoperatorn tillsammans med variabeln av typen int och siffran 98 av typen int anger att siffra 98 ( bestående av 4 bytes) ska kopiera (tilldela) dessa 4 bytes till variabeln antal_bananer. Operationen som utförts kan beskrivas som (int ) = ( int ) Observera att detta inte är programsatser utan bara ett sätt att beskriva uttryck. Varje operation ger som resultat ett värde som kallas returvärde, detta värde har en datatyp som kallas returtyp eller resultattyp. Man får en exakt beskrivning av operationen om man dessutom anger returtypen som för Uttryck 1 är int ( egentligen en variant av int som int behandlats än, mer om det senare). Detta kan man skriva som (int ) = (int ): int Generellt: ( datatyp operand till vänster ) operator ( datatyp operand till höger ) : returtyp Det som står till vänster om kolon kallas för operationens signatur. I tilldelningssatsen utnyttjas inte returvärdet. Det gör det däremot i den sammansatta satsen i Uttryck 2. medel_antal = (antal_bananer + antal_apelsiner) / 2.0; Satsen är sammansatt av tre enkla uttryck med var sin operator =, + och /. För att exakt hur satsen tolkas delar man upp den i dess enkla uttryck och utvärderar dom i tur och ordning. Denna ordning bestäms av operatorprioriteter som är angivna i bilaga operatorprioriteter. I korthet kan sägas att de flesta operatorer ska läsas från vänster till höger. Tilldelningsoperatorn = är ett tydligt undantag då den läses från höger till vänster. Uppenbara undantag finns också i aritmetiska uttryck som 3 + 4 * 5. Uttrycket 4*5 beräknas före additionen med 3, detta kommer sig av just operatorprioriteten. Utvärderingsordningen för operatorer kan alltid ändra med hjälp av parenteser. Jämför: ( 3 + 4 ) * 5 I tur och ordning utvärderas antal_bananer + antal_apelsiner denna operation är en addition mellan två heltal, och resultatet är ett heltal alltså

( int ) + ( int ) : int Då operationen är utförd har 89 och 56 adderats och resultatet 145 av typen int erhållits. Därefter utvärderas nästa operation, / operationen. Den kan man läsa ut som eller 145 / 2.0 (int ) / ( double ): double Resultatet av en division med flyttal är ett flyttal. Av denna operation erhålls resultatet 72.5 av typen double. Därefter utförs operationen = eller medel_antal = 72.5 ( double )= ( double ) : double För räkneoperatorerna gäller allmänt att om någon av operanderna är av flyttalstyp kommer resultatet vara av flyttalstyp, och omvänt, om båda operanderna är av heltalstyp kommer resultatet att vara av heltalstyp. Exempelvis ( double ) + ( double ) : double En addition av två flyttal ger resultat av flyttalstyp ( double ) ( int ) : double En subtraktion av ett flyttal och ett heltal ger resultat av flyttalstyp. Egentligen omvandlas heltalet först till ett flyttal innan subtraktionen. Regeln för typer vid räkneoperationer kan ge en del oväntade resultat, i synnerhet vid division. Division mellan två heltal ger resultat av typen heltal ( int ) / ( int ) : int Exempelvis ger divisionen 13 / 5 resultatet 2. Betrakta:

#include<iostream> using namespace std; int main() { int i, j; i = 14; j = 19; double resultat; resultat = j / i; cout << " 19 / 14 = "<< resultat << endl; return 0; } Vid programkörning skrivs på skärmen 19 / 14 = 1 Press any key to continue Detta trots att variabeln resultat deklarerats som double. Eftersom operationen ( int ) / (int ) ger resultattyp int kommer variabeln resultat att innehålla värdet 1. Om vi stället hade skrivit Rad 10: resultat = double( j ) / i; Skulle variabeln j omvandlats till flyttal och divisionsoperationen skulle då vara ( double ) / ( int ) : double Och värdet på variabeln resultat skulle då vara 1.35714 Uttycket double( j ) är ett exempel på typomvandling.