Introduk)on C- programmering



Relevanta dokument
Introduk)on C-programmering

Repetition C-programmering

Introduktion C-programmering

Pekare och Arrayer. Ulf Assarsson. Originalslides av Viktor Kämpe

Grundläggande C-programmering

Grundläggande C-programmering del 1 - För maskinorienterad programmering

Grundläggande C-programmering del 1 - För maskinorienterad programmering

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

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Ulf Assarsson. Grundläggande C-programmering del 2 Pekare och Arrayer. Läromoment:

Fortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

En kort text om programmering i C.

Imperativ programmering. Föreläsning 3

Fortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe

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

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

Programmering i C. Vad är C? Målsättning. Litteratur. Jämförelse med Java. Exempel : Ett program som skriver ut texten Hello, world

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

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

Tentamen Grundläggande programmering

Att komma igång. Vad är ett program? Kompilerande-Interpreterande Programmeringsmiljö Hello World! Att programmera och ett enkelt program

Programmeringsteknik med C och Matlab

SMD 134 Objektorienterad programmering

Introduk+on +ll programmering i JavaScript

Programmering A. Johan Eliasson

TDP002 Imperativ programmering

6.1 Kompilering och lite grundläggande information

Grundläggande datalogi - Övning 1

Programmering av inbyggda system. Pekare och Arrayer. Ulf Assarsson. Originalslides av Viktor Kämpe

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

C-programmering. Målsättning Introducera programmering i C för de som inte har någon erfarenhet av C eller C++. Litteratur

TDDC77 Objektorienterad Programmering

Föreläsning 3. Programmering, C och programmeringsmiljö

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Det finns många flaggor till g++,

Kompilatorteknik. Görel Hedin Datavetenskap Lunds Tekniska Högskola. Temaföreläsning, Datorer i system, 2014

DD1361 Programmeringsparadigm. Carina Edlund

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

Sista delen av kursen

Programspråkslingvistik. Sista delen av kursen. Ett programspråk

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

Föreläsning 3: Booleans, if, switch

Sista delen av kursen

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

Klassdeklaration. Metoddeklaration. Parameteröverföring

Du ska nu skapa ett litet program som skriver ut Hello World.

Föreläsning 6: Introduktion av listor

Vad är det och hur definierar vi en Biblioteksfunktioner (math) Top-down-programmering lokala globala variabler Arrays som in-parametrar

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

Grundkurs Programmering

lex källkod lex.l lexkompilator lex.yy.c C- kompilator lex.yy.c a.out sekvens av tokens a.out input specifikation av tokens mha reguljära uttryck

Pascal. reserverade ord fördefinierade funktioner och procedurer egendefinierade funktioner, procedurer och objekt

Ulf Assarsson. Grundläggande C-programmering del 3. Läromoment: Grundläggande C-programmering del 3

TDIU01 - Programmering i C++, grundkurs

Övning2. Variabler. Data typer

Hjälpmedel för kompilatorkonstruktion, DVB004

IT för personligt arbete F6

EDAf30: Programmering i C++, 7.5 hp. EDAf30: Programmering i C++, 7.5 hp Administration. EDAf30: Programmering i C++, 7.5 hp Obligatoriska moment

Funktionens deklaration

Tentamen i Programmering grundkurs och Programmering C

l uppgiftsformulering l algoritmkonstruktion l verifikation l kodning l testning och avlusning l validering l dokumentering l underhœll Kapitel 2

Att använda pekare i. C-kod

Pascal... Pascal. Pascal... Pascal...

Ett enkelt program i C++, hello.cpp. #include <iostream> int main() { std::cout << "Hello World\n"; return 0; } C++, Övning 1

Exempel på ett litet Ada-program

TDP002 - Imperativ programmering

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

Skizz till en enkel databas

Winstrand Development

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

Classes och Interfaces, Objects och References, Initialization

1 Funktioner och procedurell abstraktion

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

PROGRAMMERING 2 GRUNDLÄGGANDE SEMANTIK 4

F4. programmeringsteknik och Matlab

Data, typ, selektion, iteration

TDDE10 TDDE11, 725G90. Gemensam kurswebsida på:

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Daniel Karlsson Jonas Markström Oskar Mårtensson Patrik Nordström

Program & programmering

JAVASCRIPT. Beteende

Tentamen i. för D1 m fl, även distanskursen. fredag 13 januari 2012

Objektorienterad programmering Föreläsning 4

grundläggande C++, funktioner m.m.

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.

Föreläsning 5: Rekursion

Välkomna till NADA. Paradigm i datalogin. Vad är ett paradigm

2.4. Teckensträngar och logiska uttryck

Introduktion till PHP

Imperativ programmering

Programmering av inbyggda system. Pekare och Arrayer. Viktor Kämpe

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll,

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,

Föreläsning 2: Avlusning och antilustekniker

Tentamen i. TDDA 69 Data och programstrukturer

Sockets: server. with Ada.Command_Line; use Ada.Command_Line; with Ada.Exceptions; use Ada.Exceptions; with Ada.Text_IO; use Ada.

Föreläsning 10. Pekare (Pointers)

Transkript:

Introduk)on C- programmering Ulf Assarsson Originalslides av Viktor Kämpe

C Bakgrund Short Code, 1949, possibly 1:st high level language for a real machine Autocode, early 50 ies. Fortran, IBM, ~57. Lisp, 58. Cobol 60 (Common Business- oriented language. BASIC, 1964. ALGOL 60 (ALGOrithmic Language 1960). Simula, 60:ies. C, ~1969. Prolog, 1972. Ada, ~1975 Pascal, ~1975. ML, 1978. Introduk)on C- programmering 2

C Bakgrund Short Code, 1949, 1:st high level language Kompilerades varje gång Autocode, early 50 ies. Hade compiler Fortran, IBM, ~57. Finns kvar pga mycket legacy code Lisp, 58 Cobol 60 (Common Business- oriented language. BASIC, 1964. ALGOL 60 (ALGOrithmic Language 1960). Simula, 60:ies. C, ~1969. Prolog, 1972. Ada, ~1975 Pascal, ~1975. ML, 1978. Introduk)on C- programmering 3

C Bakgrund Short Code, 1949, 1:st high level language Kompilerades varje gång Autocode, early 50 ies. Hade compiler Fortran, IBM, ~57. Finns kvar pga mycket legacy code Lisp, Fortran 58 Cobol C AREA 60 OF (Common A TRIANGLE Business- oriented HERON'S FORMULA language. BASIC, C INPUT 1964. - CARD READER UNIT 5, INTEGER INPUT ALGOL C OUTPUT 60 (ALGOrithmic - LINE PRINTER Language UNIT 6, REAL 1960). OUTPUT C INPUT ERROR DISPAY ERROR OUTPUT CODE 1 IN JOB CONTROL LISTING Simula, 60:ies. INTEGER A,B,C C, ~1969. READ(5,501) A,B,C Prolog, 501 FORMAT(3I5) 1972. Ada, IF(A.EQ.0 ~1975.OR. B.EQ.0.OR. C.EQ.0) STOP 1 Pascal, S = ~1975. (A + B + C) / 2.0 ML, 1978. AREA = SQRT( S * (S - A) * (S - B) * (S - C)) WRITE(6,601) A,B,C,AREA 601 FORMAT(4H A=,I5,5H B=,I5,5H C=,I5,8H AREA=,F10.2,12HSQUARE UNITS) STOP END Introduk)on C- programmering 4

C Bakgrund Short Code, 1949, 1:st high level language Kompilerades varje gång Autocode, early 50 ies. Hade compiler Fortran, IBM, ~57. Finns kvar pga mycket legacy code Lisp, 58 För matema)k/ai. Cobol 60 (Common Business- oriented language. BASIC, 1964. ALGOL 60 (ALGOrithmic Language 1960). Simula, 60:ies. C, ~1969. Prolog, 1972. Ada, ~1975 Pascal, ~1975. ML, 1978. Lisp (defun factorial (n) (if (= n 0) 1 (* n (factorial (- n 1))))) Introduk)on C- programmering 5

C Bakgrund Short Code, 1949, 1:st high level language Kompilerades varje gång Autocode, early 50 ies. Hade compiler Fortran, IBM, ~57. Finns kvar pga mycket legacy code Lisp, 58 För matema)k/ai. Cobol 60 (Common Business- oriented language. BASIC, 1964. ALGOL 60 (ALGOrithmic Language 1960). Simula, 60:ies. C, ~1969. Prolog, 1972. Ada, ~1975 Pascal, ~1975. ML, 1978. Impera)vt, procedurellt, idag objektorienterat För business + finance. Pra)gt. COBOL IDENTIFICATION DIVISION. PROGRAM- ID. HELLO- WORLD. PROCEDURE DIVISION. DISPLAY 'Hello, world'. STOP RUN. Introduk)on C- programmering 6

C Bakgrund Short Code, 1949, 1:st high level language Kompilerades varje gång Autocode, early 50 ies. Hade compiler Fortran, IBM, ~57. Finns kvar pga mycket legacy code Lisp, 58 För matema)k/ai. Cobol 60 (Common Business- oriented language. BASIC, 1964. ALGOL 60 (ALGOrithmic Language 1960). Simula, 60:ies. C, ~1969. Prolog, 1972. Ada, ~1975 Pascal, ~1975. ML, 1978. Introduk)on C- programmering Impera)vt, procedurellt, idag objektorienterat BASIC 5 LET S = 0 10 MAT INPUT V 20 LET N = NUM 30 IF N = 0 THEN 99 40 FOR I = 1 TO N 45 LET S = S + V(I) 50 NEXT I 60 PRINT S/N 70 GO TO 5 99 END 7

C Bakgrund Short Code, 1949, 1:st high level language Autocode, early 50 ies. Fortran, IBM, ~57. Lisp, 58 För matema)k/ai. Cobol 60 (Common Business- oriented language. BASIC, 1964. ALGOL 60 (ALGOrithmic Language 1960). Simula, 60:ies. C, ~1969. Prolog, 1972. Ada, ~1975 Pascal, ~1975. ML, 1978. Kompilerades varje gång Hade compiler Finns kvar pga mycket legacy code Influerade C Impera)vt, procedurellt, idag objektorienterat Introduk)on C- programmering 8

C Bakgrund Short Code, 1949, 1:st high level language Autocode, early 50 ies. Fortran, IBM, ~57. Lisp, 58 För matema)k/ai. Cobol 60 (Common Business- oriented language. BASIC, 1964. ALGOL 60 (ALGOrithmic ALGOL Language 1960). Simula, 60:ies. C, ~1969. Prolog, 1972. Ada, ~1975 Pascal, ~1975. ML, 1978. Introduk)on C- programmering Kompilerades varje gång Hade compiler Finns kvar pga mycket legacy code Impera)vt, procedurellt, idag objektorienterat Influerade C procedure Absmax(a) Size:(n, m) Result:(y) Subscripts:(i, k); value n, m; array a; integer n, m, i, k; real y; begin integer p, q; y := 0; i := k := 1; for p:=1 step 1 unpl n do for q:=1 step 1 unpl m do if abs(a[p, q]) > y then begin y := abs(a[p, q]); i := p; k := q end end Absmax 9

C Bakgrund Short Code, 1949, 1:st high level language Autocode, early 50 ies. Fortran, IBM, ~57. Lisp, 58 För matema)k/ai. Cobol 60 (Common Business- oriented language. BASIC, 1964. Kompilerades varje gång Hade compiler Finns kvar pga mycket legacy code Impera)vt, procedurellt, idag objektorienterat ALGOL 60 (ALGOrithmic Language 1960). Influerade C Simula, 60:ies. 1:a objektorienterade språk, klasser, virtuella metoder, objekt, arv C, ~1969. Prolog, 1972.! Simula Begin Ada, ~1975 OutText ("Hello World!"); Pascal, ~1975. OuPmage; ML, 1978. End; Introduk)on C- programmering 10

C Bakgrund Short Code, 1949, 1:st high level language Autocode, early 50 ies. Fortran, IBM, ~57. Lisp, 58 För matema)k/ai. Cobol 60 (Common Business- oriented language. BASIC, 1964. Kompilerades varje gång Hade compiler Finns kvar pga mycket legacy code Impera)vt, procedurellt, idag objektorienterat ALGOL 60 (ALGOrithmic Language 1960). Influerade C Simula, 60:ies. 1:a objektorienterade språk, klasser, virtuella metoder, objekt, arv C, ~1969. Prolog, 1972. Ada, ~1975 Pascal, ~1975. ML, 1978. /* C */ int main() { printf( Hello World!\n"); return 0; } Introduk)on C- programmering 11

C Bakgrund Short Code, 1949, 1:st high level language Autocode, early 50 ies. Fortran, IBM, ~57. Lisp, 58 För matema)k/ai. Cobol 60 (Common Business- oriented language. BASIC, 1964. Kompilerades varje gång Hade compiler Finns kvar pga mycket legacy code Impera)vt, procedurellt, idag objektorienterat ALGOL 60 (ALGOrithmic Language 1960). Influerade C Simula, 60:ies. 1:a objektorienterade språk, klasser, virtuella metoder, objekt, arv C, ~1969. Prolog, 1972. AI/lingvis)k. Facts/rules, queries over rela)onships Ada, ~1975 Pascal, ~1975. ML, 1978. Prolog?- write('hello world!'), nl. Hello world! true. Introduk)on C- programmering?- 12

C Bakgrund Short Code, 1949, 1:st high level language Autocode, early 50 ies. Fortran, IBM, ~57. Lisp, 58 För matema)k/ai. Cobol 60 (Common Business- oriented language. BASIC, 1964. ALGOL 60 (ALGOrithmic Language 1960). Influerade C Simula, 60:ies. 1:a objektorienterade språk, klasser, virtuella metoder, objekt, arv C, ~1969. Prolog, 1972. AI/lingvis)k. Facts/rules, queries over rela)onships Ada, ~1975 Impera)vt, procedurellt, idag objektorienterat Pascal, ~1975. ML, 1978. Introduk)on C- programmering Kompilerades varje gång Hade compiler Finns kvar pga mycket legacy code with Ada.Text_IO; use Ada.Text_IO; procedure Hello is begin Put_Line ("Hello, world!"); end Hello; Impera)vt, procedurellt, idag objektorienterat 13

C Bakgrund Short Code, 1949, 1:st high level language Autocode, early 50 ies. Fortran, IBM, ~57. Lisp, 58 För matema)k/ai. Cobol 60 (Common Business- oriented language. BASIC, 1964. ALGOL 60 (ALGOrithmic Language 1960). Influerade C Simula, 60:ies. 1:a objektorienterade språk, klasser, virtuella metoder, objekt, arv C, ~1969. Prolog, 1972. AI/lingvis)k. Facts/rules, queries over rela)onships Ada, ~1975 Impera)vt, Pascal procedurellt, idag objektorienterat Pascal, ~1975. Program HelloWorld; Impera)vt, procedurellt, idag objektorienterat ML, 1978. Introduk)on C- programmering Kompilerades varje gång Hade compiler Finns kvar pga mycket legacy code Impera)vt, procedurellt, idag objektorienterat Begin WriteLn('Hello world!') {no ";" is required aper the last statement of a block - adding one adds a "null statement" to the program} End. 14

C Bakgrund Short Code, 1949, 1:st high level language Autocode, early 50 ies. Fortran, IBM, ~57. Lisp, 58 För matema)k/ai. Cobol 60 (Common Business- oriented language. BASIC, 1964. Kompilerades varje gång Hade compiler Finns kvar pga mycket legacy code Impera)vt, procedurellt, idag objektorienterat ALGOL 60 (ALGOrithmic Language 1960). Influerade C Simula, 60:ies. 1:a objektorienterade språk, klasser, virtuella metoder, objekt, arv C, ~1969. Prolog, 1972. AI/lingvis)k. Facts/rules, queries over rela)onships Ada, ~1975 Impera)vt, procedurellt, idag objektorienterat Pascal, ~1975. Impera)vt, procedurellt, idag objektorienterat ML, 1978. Funk)onellt, rekursivt. Föregångare )ll Haskell. fun fac (0 : int) : int = 1 fac (n : int) : int = n * fac (n - 1) Introduk)on C- programmering 15

C Bakgrund Maskinnära programmering: Behöver språk med pekare )ll absoluta adresser Dvs definiera sin pekare )ll en godtycklig adress. C, C++, D, (C#, COBOL, Fortran, Basic). Introduk)on C- programmering 16

C Historik B, Bell Labs ~1969 C: Utvecklades först 1969 1973 av Dennis Ritchcie vid AT&T Bell Labs. Högnivå språk med kontakt mot maskinvara. E} utav de mest använda språken. C++, D. Maskinnära, pekare, front/backend Introduk)on C- programmering 17

C respek)ve Assembler Varför C istället för assembler? Varför förstå hur C kompileras )ll assembler? prestandaop)mering och resonera kring prestanda ( tex för datorgrafik, GPU:er, HPC). energikonsump)on säkerhet/robusthet/risker Kunna debugga Introduk)on C- programmering 18

Översikt C fyra lek)oner Lekt 1: intro )ll C Lekt 2+3: pekare Lekt 4: mixa C och assembler Introduk)on C- programmering 19

C Standarder 1978, K&R C (Kernighan & Ritchie) 1989, C89/C90 (ANSI- C) 1999, C99 (Rev. ANSI- standard) 2011, C11 (Rev. ANSI- standard) 20

Hello world! program #include <stdio.h> int main() { printf( Hello World!\n"); return 0; } 21

Integrerad utvecklings miljö (IDE) Kör Bygg T ex CodeLite som är gra)s och open- source. (h}p://codelite.org/ ) 22

Från terminalen > gcc o hello.exe main.c > hello.exe Hello World! > Bygg Kör 23

Variabler #include <stdio.h> int x; int main() { char y; x = 32; y = 'a'; x = x + y; Typ Variabelnamn } printf("x har nu värdet %i och y har värdet %i som kodar tecknet %c\n", x, (int)y, y); return 0; Utskri: x har nu värdet 129 och y har värdet 97 som kodar tecknet a 24

Deklara)oner och )lldelningar #include <stdio.h> int x; int main() { char y; x = 32; y = 'a'; Deklara)oner Tilldelningar x = x + y; } printf("x har nu värdet %i och y har värdet %i som kodar tecknet %c\n", x, (int)y, y); return 0; En deklarerad variabel som ännu inte )lldelats e} värde är oinivaliserad 25

Typkonverteringar #include <stdio.h> int x; int main() { char y; Implicit typkonvertering x = 32; y = 'a'; x = x + y; Explicit typkonvertering } printf("x har nu värdet %i och y har värdet %i som kodar tecknet %c\n", x, (int)y, y); return 0; Typkonvertering kallas också cast, och man säger a} man castar. 26

27

C89 deklara)oner först #include <stdio.h> int x; int main() { x = 32; En )lldelning innan deklara)onerna är EJ )llåtet enligt C89 char y = 'a'; x = x + y; } printf("x har nu värdet %i och y har värdet %i som kodar tecknet %c\n", x, (int)y, y); return 0; Fungerar ibland ändå (t ex i CodeLite), men inte i XCC12 som vi ska använda senare. 28

Funk)oner #include <stdlib.h> int foo(int x, char y) { int sum = 0; argument while(y- - > 0) { sum += x*y; } } return sum; Returvärde av returtyp Argumenten är pass- by value. int var1; char var2 = 7; var1 = foo(5, var2); var2 har for arande värdet 7 eer funk)onsanropet 29

Synlighet/Visibility/Scope Global synlighet Filsynlighet Lokal synlighet (global scope) (file scope) (e.g. func)on scope) 30

Synlighet #include <stdlib.h> char x; int foo() { // x är synlig // y är inte synlig } char y; 31

Synlighet på funk)onsnivå #include <stdlib.h> char x; int foo(float x) { // argumentet x (float) är synligt } 32

Synlighet på funk)onsnivå #include <stdlib.h> char x; int foo() { int x = 4; return x; } 33

Vilken synlighet har högst prioritet? #include <stdio.h> int x; int foo(int x) { if( x == 0 ){ int x = 4; return x; } } return x; int main() { x = 1; x = foo(0); printf("x is %i", x); return 0; } Vad är x? 34

Funk)onsprototyper #include <stdio.h> // funktionsprototyp int foo(int x); int main() { printf("x is %i", foo(0)); return 0; } int foo(int x) { // funktionskropp } 35

Programstruktur // main.c #include <stdio.h> #include "foo.h" int main() { } printf("x is %i", foo(0)); return 0; // foo.h int foo(int x); // foo.c #include <stdlib.h> int foo(int x) { if( x == 0 ){ int x = 4; return x; } } return x; c- fil Inkluderar header- fil header- fil Innehåller funk)onsprototyper c- fil header- filen måste inte ha samma namn som c- filen, men det är enklare så. 36

Från källkod )ll exekverbar 1. Preprocessing 2. Kompilering 3. Länkning 37

Preprocessorn // main.c #include <stdio.h> #include "foo.h" Copy- paste av filer #define MAX_SCORE 100 #define SQUARE(x) (x)*(x) Find- and- replace av strängar int main() { } printf("högsta möjliga poäng är %i\n", MAX_SCORE); printf("kvadraten av 3 är %i\n", SQUARE(1+2)); printf("x is %i", foo(0)); return 0; Preprocessorn arbetar på källkoden på textnivå. 38

Kompilering Processar en c- fil i taget Skapar en objek il som innehåller: Maskinkod för instruk)oner Symboler för addresser För funk)oner/variabler i objek ilen. För funk)oner/variabler i andra objek iler/bibliotek. 39

Länkning Sä}er samman (flera) objek iler )ll en exekverbar fil (.exe). Översä}er symbolerna )ll (rela)va) adresser. 40

Aritme)ska operatorer Basic assignment a = b Addi)on a + b Subtrac)on a - b Unary plus (integer promo)on) +a Unary minus (addi)ve inverse) - a Mul)plica)on a * b Division a / b Modulo (integer remainder) a % b Increment Prefix ++a Pos ix a++ Decrement Prefix - - a Pos ix a- - h}p://en.wikipedia.org/wiki/operators_in_c_and_c%2b%2b#arithme)c_operators 41

Jämförelseoperatorer Equal to Not equal to Greater than Less than Greater than or equal to a == b a!= b a > b a < b a >= b Less than or equal to a <= b h}p://en.wikipedia.org/wiki/operators_in_c_and_c%2b%2b#comparison_operators.2frela)onal_operators 42

Logiska operatorer Logical nega)on (NOT) Logical AND Logical OR!a a && b a b h}p://en.wikipedia.org/wiki/operators_in_c_and_c%2b%2b#logical_operators 43

Bit opera)oner Bitwise NOT Bitwise AND Bitwise OR Bitwise XOR Bitwise le shi Bitwise right shi ~a a & b a b a ^ b a << b a >> b h}p://en.wikipedia.org/wiki/operators_in_c_and_c%2b%2b#bitwise_operators 44

Sammansa}a )lldelsningsoperatorer Operator name Syntax Meaning Addi)on assignment a += b a = a + b Subtrac)on assignment a - = b a = a - b Mul)plica)on assignment a *= b a = a * b Division assignment a /= b a = a / b Modulo assignment a %= b a = a % b Bitwise AND assignment a &= b a = a & b Bitwise OR assignment a = b a = a b Bitwise XOR assignment a ^= b a = a ^ b Bitwise le shi assignment a <<= b a = a << b Bitwise right shi assignment a >>= b a = a >> b h}p://en.wikipedia.org/wiki/operators_in_c_and_c%2b%2b#compound_assignment_operators 45

If- else satser int x = - 4; if( x == 0 ){ //... } if( x ){ //... } else { //... } Utvärderar )ll falskt, kör ej. Utvärderas )ll sant, kör, ty ( x!= 0 ) Noll betraktas som falskt. Allt som är skilt från noll betraktas som sant. 46

Loopar int x = 5; int x = 5; while( x!=0 ) x- - ; while( x ) x- - ; int x; for( x=5; x; ) x- - ; Tre ekvivalenta loopar. Om inga måsvingar används så är loop- kroppen e} enda u}ryck. 47

Nästa föreläsning: Pekare

Pekare Har e} värde och en typ Värdet är en minnesadress. Typen talar om vad som finns där. 49

Operatorer för pekare Operator name Syntax Array subscript Indirec)on ("object pointed to by a") Reference ("address of a") Structure dereference ("member b of object pointed to by a") Structure reference ("member b of object a") a[b] *a &a a- >b a.b h}p://en.wikipedia.org/wiki/operators_in_c_and_c%2b%2b#member_and_pointer_operators Sista operatorn är för a} referera medlemmar av en struktur (struct), så ej en pekare operator. 50