Programmeringsspråket C Del 2. Hans Petter Taugbøl Kragset

Like dokumenter
Programmeringsspråket C Del 3. Hans Petter Taugbøl Kragset

Velkommen til INF1060 høsten 2017

Del 1 En oversikt over C-programmering

IN 147 Program og maskinvare

IN 147 Program og maskinvare

Dagens tema C, adresser og pekere

Ark 3 av 26. printf("i adresse %08x ligger b med verdien %d.\n", &b, b); printf("i adresse %08x ligger a med verdien %d.

Vektorer. Dagens tema. Deklarasjon. Bruk

Programmeringsspråket C Del 2. Michael Welzl

Repetisjon fra sist - 1: Plan for dagen. Repetisjon fra sist 2: Hva jeg glemte sist: Nyttige Kommandoer

Dagens tema INF1070. Vektorer (array er) Tekster (string er) Adresser og pekere. Dynamisk allokering

Programmeringsspråket C Del 2

Programmeringsspråket C Del 2

Programmeringsspråket C Del 2

Del 2 Tabeller, arrays, strenger

Del 4 Noen spesielle C-elementer

Programmeringsspråket C Del 3

Programmeringsspråket C Del 3

Dagens tema INF1070. Vektorer (array-er) Tekster (string-er) Adresser og pekere. Dynamisk allokering

Programmeringsspråket C Del 3

Programmeringsspråket C Del 3

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

Dagens tema: Datastrukturer

Programmeringsspråket C

Kapittel 1 En oversikt over C-språket

Velkommen til INF1060. Introduksjon til operativsystemer og datakommunikasjon

UNIVERSITETET I OSLO

Programmeringsspråket C

Dagens tema. Cs preprosessor Separat kompilering av C-funksjoner C og minnet Oversikt over operatorene

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

Nybegynnerkurs i C. Øyvind Grønnesby. 14. oktober Introduksjon Typer Operatorer Kontrollstrukturer Pekere Makroer Lenker

Løsningsforslag til eksamen i INF103

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

IN 147 Program og maskinvare

Del 3. Pekere RR 2016

Programmeringsspråket C

Dagens tema. Cs preprosessor Separat kompilering av C-funksjoner C og minnet Oversikt over operatorene

UNIVERSITETET I OSLO

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

Dagens tema. Kort repetisjon om rutiner. Programmering i C Variable og adresser. Vektorer. Tekster. Preprosessoren. Separat kompilering

Dagens tema. Mer om C Enkle datatyper Sammensatte datatyper: Vektorer og matriser Tekster Mengder Strukturer Unioner Ringbuffere

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

Algoritmer og datastrukturer A.1 Filbehandling på bit-nivå

Oving 2. Oppgave 1. #include <stdio.h> int main(int argc, char **argv) { char *navn = argv[1]; printf ("Navnet ditt er %s\n", navn); } Oppgave 2

INF1000: noen avsluttende ord

Overflows. Building Secure Software. Inf 329, Høst Chapter 7. Lars Skjærven

IN 147 Program og maskinvare

IN 147 Program og maskinvare. Dagens tema

INF1000: noen avsluttende ord

Dagens tema. Adresser som parametre Dynamisk allokering Signaturer Definisjon av nye typenavn Typekonvertering Pekere og vektorer

Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Dagens program. Operativsystemer Prosesser og systemkall i UNIX Hente prosessens nummer Starte prosesser Vente på prosesser Utføre programmer

Mer om C programmering og cuncurrency

Objekter og referanser

Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Løsningsforslag til 2. del av Del - EKSAMEN

EKSAMENSOPPGAVE. INF-1100 Innføring i programmering og datamaskiners virkemåte. Ingen. Elektronisk (WiseFlow) Robert Pettersen

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Signaturer. Dagens tema. En vanlig feil int-funksjon. Dette kan noen ganger gi rare feilmeldinger: INF1070 INF1070 INF1070 INF1070

Dagens tema. Rutiner i LC-2 Og her er tilsvarende kode for LC-2: Funksjoner i C Her er det samme programmet i C: Kort repetisjon om rutiner

Dagens tema. Dynamisk allokering Signaturer Definisjon av typer og nye typenavn Typekonvertering Pekere, vektorer og lister Dokumentasjon

IN 147 Program og maskinvare

Dagens tema INF2270. Cs preprosessor. Separat kompilering av C funksjoner. C og minnet. Dag Langmyhr,Ifi,UiO: Forelesning 5. februar 2007 Ark 1 av 15

Dagens tema. Oppsummering om assemblerspråk. Programmering i C. Bakgrunn. Et minimalt eksempel med forklaring. Datatyper i C.

Dagens tema INF1070. Info om C. Cs preprosessor. Feilsøking. Dag Langmyhr,Ifi,UiO: Forelesning 31. januar 2005 Ark 1 av 29

Informasjon om C. Dagens tema INF1070 INF1070 INF1070 INF1070. Den viktigste kilden til informasjon om C (utenom en god. C-funksjonene.

Programmeringsspråket C Del 3. Michael Welzl

Programmering i C++ Løsningsforslag Eksamen høsten 2005

Minneområder Det er vanlig å dele opp minnet til en prosess i disse ulike områdene: Fast minne Store og små indianere «align» ing struct er

Enkle generiske klasser i Java

2 Om statiske variable/konstanter og statiske metoder.

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

Hvordan en prosessor arbeider, del 1

Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 14.

Algoritmer og datastrukturer A.1 BitInputStream

Intro til Atmel Studio Bits&bytes

LabVIEW seriekommunikasjon med mikrokontroller

IN 147 Program og maskinvare

Høgskoleni østfold EKSAMEN

Dagens tema INF1070. Signaturer. Typekonvertering. Pekere og vektorer. struct-er. Definisjon av nye typenavn. Lister

UNIVERSITETET I OSLO

INF Oblig 2 semantikksjekk og kodegenerering

Cs preprosessor. Dagens tema. Betinget kompilering

Repetisjon. INF gruppe 13

Object interaction. Innhold. Abstraksjon Grunnleggende programmering i Java Monica Strand 3. september 2007.

IN 147 Program og maskinvare. Vanlige feil ved bruk av pekere Feilsøking Debuggere

Du må håndtere disse hendelsene ved å implementere funksjonene init(), changeh(), changev() og escape(), som beskrevet nedenfor.

Dagens tema: Kjøresystemer II

Obligatorisk Innlevering 2

AlgDat - Øvingsforelesning 1 Introduksjon til Python, lenkede lister og øving 1

Løsningsforslag for eksamensoppgave, våren 2004

INF5110. Oblig 2 presentasjon

INF2100. Oppgaver 23. og 24. september 2010

Pekere og vektorer. Dagens tema. I C gjelder en litt uventet konvensjon:

Dagens tema. Det siste om C Pekere og vektorer. Pekere til pekere. Vanlige pekerfeil. struct-er og typedef. Lister. Feilsøking

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

UNIVERSITETET I OSLO

Transkript:

Programmeringsspråket C Del 2 Hans Petter Taugbøl Kragset

Repetisjon I C er ikke array en egen type, men variabler kan være arrayer! 28.08.17 Hans Petter Taugbøl Kragset 2

Arrays Java int[] arr1 = {1, 2, 3}; int[] arr2 = new int[100]; arr1[2] = 0; //arr1 = {1, 2, 0} C int arr1[] = {1, 2, 3}; int arr2[100]; arr1[2] = 0; //arr1 = {1, 2, 0} //I C er ikke array en egen type, men variabler kan være arrayer! 28.08.17 Hans Petter Taugbøl Kragset 3

Repetisjon I C er ikke array en egen type, men variabler kan være arrayer! Pekere 28.08.17 Hans Petter Taugbøl Kragset 4

Hva er en peker l1 *data *next *prev *data l2 *next struct list { struct list *next; struct list *prev; void *data; }; struct list l1; struct list l2; p?????????? l1.next = &l2; l2.prev = &l1; struct person p; l1.data = (void*) &p; *prev????? 28.08.17 Hans Petter Taugbøl Kragset 5

Repetisjon I C er ikke array en egen type, men variabler kan være arrayer! Pekere C-strenger 28.08.17 Hans Petter Taugbøl Kragset 6

C-strenger C-strenger er char-arrays som slutter med en null-byte 0000 0000 En byte er 8 bit, den minste enheten vi jobber med en char == en byte char s[10]; strcpy(s, "INF1060!!"); //s[10] = \0 ; s = I N F 1 0 6 0!! \0 28.08.17 Hans Petter Taugbøl Kragset 7

Repetisjon I C er ikke array en egen type, men variabler kan være arrayer! Pekere C-strenger Veldig likt Java på mange måter Programmering er fortsatt programmering 28.08.17 Hans Petter Taugbøl Kragset 8

Innhold Minneallokering malloc Innlesing fra bruker Innlesing fra fil Googling man-sider Minnet i datamaskinen Bitoperasjoner 28.08.17 Hans Petter Taugbøl Kragset 9

Så hvordan løser vi problemet vårt med strenger fra sist? Hva hvis vi vil ha mer enn 10 karakterer? char s[100]; char s[99999999999999999];... ikke så lur løsning. 28.08.17 Hans Petter Taugbøl Kragset 10

Minneallokering Vi introduserer: malloc() Lar oss allokere vilkårlig store minneområder char* s = malloc(5000); s peker nå på en char array med lengde 5000 5000 hva? Bytes! Hva hvis vi vil ha en int-array? int* arr = (int*) malloc(5000 * sizeof(int)); Den generelle tilnærmingen: type* s = (type*) malloc(size * sizeof(type)); 28.08.17 Hans Petter Taugbøl Kragset 11

Minneallokering forts. I forrige eksempel visste vi størrelsen, 5000. char* s = (char*) malloc(5000 * sizeof(char)) Hvorfor ikke bare bruke array? Hva hvis vi ikke vet størrelsen, f.eks. hvis vi leser fra brukeren? Naivt eksempel: Spør først om lengde på input, så om input 28.08.17 Hans Petter Taugbøl Kragset 12

Minneallokering forts. Array med dynamisk størrelse int main(void) { int read_size = //spør hvor mye vi skal lese char s[read_size] //les input fra bruker inn i s } printf("%s\n", s); 28.08.17 Hans Petter Taugbøl Kragset 13

Minneallokering forts. Hva hvis vi vil returnere et array fra en funksjon? char* read_user() { int read_size = //spør hvor mye vi skal lese char s[read_size] //les input fra bruker inn i s } return s; int main(void) { char *s = read_user(); printf("%s\n", s); } Fungerer ikke! 28.08.17 Hans Petter Taugbøl Kragset 14

Minneallokering forts. Vi kan bruke malloc! Nå har vi løst problemet vårt fra sist! char* read_user() { int read_size = //spør hvor mye vi skal lese char *s = (char*) malloc(read_size * sizeof(char)); //les input fra bruker inn i s } return s; int main(void) { char *s = read_user(); printf("%s\n", s); } 28.08.17 Hans Petter Taugbøl Kragset 15

malloc() er din venn, bli godt kjent med den! 28.08.17 Hans Petter Taugbøl Kragset 16

Innlesing fra bruker 28.08.17 Hans Petter Taugbøl Kragset 17

Innlesing fra bruker char* read_user() { int read_size = //spør hvor mye vi skal lese char *s = (char*) malloc(read_size * sizeof(char)); //les input fra bruker inn i s } return s; int main(void) { char *s = read_user(); printf("%s\n", s); } 28.08.17 Hans Petter Taugbøl Kragset 18

Innlesing fra bruker #include <stdio.h> #include <stdlib.h> char* read_user() { int read_size = //spør hvor mye vi skal lese char *s = (char*) malloc(read_size * sizeof(char)); //les input fra bruker inn i s } return s; int main(void) { char *s = read_user(); printf("%s\n", s); } 28.08.17 Hans Petter Taugbøl Kragset 19

Innlesing fra bruker #include <stdio.h> #include <stdlib.h> char* read_user() { int read_size = //spør hvor mye vi skal lese char *s = (char*) malloc(read_size * sizeof(char)); fgets(s, read_size, stdin); } return s; int main(void) { char *s = read_user(); printf("%s\n", s); } 28.08.17 Hans Petter Taugbøl Kragset 20

Innlesing fra bruker #include <stdio.h> #include <stdlib.h> char* read_user() { int read_size; char buf[64]; fgets(buf, sizeof(buf), stdin); char *s = (char*) malloc(read_size * sizeof(char)); fgets(s, read_size, stdin); } return s; int main(void) { char *s = read_user(); printf("%s\n", s); } 28.08.17 Hans Petter Taugbøl Kragset 21

Innlesing fra bruker #include <stdio.h> #include <stdlib.h> char* read_user() { int read_size; char buf[64]; fgets(buf, sizeof(buf), stdin); read_size = atoi(buf); char *s = (char*) malloc(read_size * sizeof(char)); fgets(s, read_size, stdin); } return s; int main(void) { char *s = read_user(); printf("%s\n", s); } 28.08.17 Hans Petter Taugbøl Kragset 22

Innlesing fra bruker #include <stdio.h> #include <stdlib.h> char* read_user() { int read_size; char buf[64]; fgets(buf, sizeof(buf), stdin); read_size = atoi(buf); char *s = (char*) malloc(read_size * sizeof(char) + 1); fgets(s, read_size + 1, stdin); } return s; int main(void) { char *s = read_user(); printf("%s\n", s); } 28.08.17 Hans Petter Taugbøl Kragset 23

Innlesing fra bruker #include <stdio.h> #include <stdlib.h> char* read_user() { int read_size; char buf[64]; fgets(buf, sizeof(buf), stdin); read_size = atoi(buf); char *s = (char*) malloc(read_size * sizeof(char) + 1); fgets(s, read_size + 1, stdin); } return s; int main(void) { char *s = read_user(); printf("%s\n", s); } 28.08.17 Hans Petter Taugbøl Kragset 24

Hva hvis vi ikke bruker malloc? #include <stdio.h> #include <stdlib.h> char* read_user() { int read_size; char buf[64]; fgets(buf, sizeof(buf), stdin); read_size = atoi(buf); segmentation fault char s[read_size + 1]; fgets(s, read_size + 1, stdin); } return s; int main(void) { char *s = read_user(); printf("%s\n", s); } 28.08.17 Hans Petter Taugbøl Kragset 25

Filer 28.08.17 Hans Petter Taugbøl Kragset 26

Hva har dette med filer å gjøre? #include <stdio.h> #include <stdlib.h> char* read_user() { int read_size; char buf[64]; fgets(buf, sizeof(buf), stdin); read_size = atoi(buf); char *s = (char*) malloc(read_size * sizeof(char) + 1); fgets(s, read_size + 1, stdin); } return s; int main(void) { char *s = read_user(); printf("%s\n", s); } 28.08.17 Hans Petter Taugbøl Kragset 27

Hva har dette med filer å gjøre? #include <stdio.h> #include <stdlib.h> char* read_user() { int read_size; char buf[64]; fgets(buf, sizeof(buf), stdin); read_size = atoi(buf); char *s = (char*) malloc(read_size * sizeof(char) + 1); fgets(s, read_size + 1, stdin); } return s; int main(void) { char *s = read_user(); printf("%s\n", s); } 28.08.17 Hans Petter Taugbøl Kragset 28

Hva har dette med filer å gjøre? #include <stdio.h> #include <stdlib.h> char* read_file() { int read_size; char buf[64]; FILE *file = fopen("test.txt", "r"); fgets(buf, sizeof(buf), stdin); read_size = atoi(buf); char *s = (char*) malloc(read_size * sizeof(char) + 1); fgets(s, read_size + 1, stdin); } return s; int main(void) { char *s = read_file(); printf("%s\n", s); } 28.08.17 Hans Petter Taugbøl Kragset 29

Hva har dette med filer å gjøre? #include <stdio.h> #include <stdlib.h> char* read_file() { int read_size; char buf[64]; FILE *file = fopen("test.txt", "r"); fgets(buf, sizeof(buf), file); read_size = atoi(buf); char *s = (char*) malloc(read_size * sizeof(char) + 1); fgets(s, read_size + 1, file); } return s; int main(void) { char *s = read_file(); printf("%s\n", s); } 28.08.17 Hans Petter Taugbøl Kragset 30

Hva har dette med filer å gjøre? #include <stdio.h> #include <stdlib.h> char* read_file(char *file_name) { int read_size; char buf[64]; FILE *file = fopen(file_name, "r"); fgets(buf, sizeof(buf), file); read_size = atoi(buf); char *s = (char*) malloc(read_size * sizeof(char) + 1); fgets(s, read_size + 1, file); } return s; int main(void) { char *s = read_file("test.txt"); printf("%s\n", s); } 28.08.17 Hans Petter Taugbøl Kragset 31

#include <stdio.h> #include <stdlib.h> Programmet er ferdig! char* read_file(char *file_name) { int read_size; char buf[64]; FILE *file = fopen(file_name, "r"); fgets(buf, sizeof(buf), file); read_size = atoi(buf); char *s = (char*) malloc(read_size * sizeof(char) + 1); fgets(s, read_size + 1, file); } return s; int main(void) { char *s = read_file("test.txt"); printf("%s\n", s); } 28.08.17 Hans Petter Taugbøl Kragset 32

Helt seriøst: Det som er presentert så langt er mer eller mindre det dere trenger for å løse oblig1 og 2. Arrayer og pekere Structer C-strenger Innlesing fra bruker Innlesing fra fil Skriving til skjerm 28.08.17 Hans Petter Taugbøl Kragset 33

Helt seriøst: Det som er presentert så langt er mer eller mindre det dere trenger for å løse oblig1 og 2. Det som mangler: Skriving til fil (enkelt!) Dobbeltpekere (peker til peker) (???) Bit-operasjoner (0 og 1 og sånt)...litt mer småtteri... Resten er bare programmering!! (Det kan dere jo fra før :) ) 28.08.17 Hans Petter Taugbøl Kragset 34

Selvfølgelig må dere gjør det selv, så det kan være lurt å gjøre ukesoppgaver for å øve litt. 28.08.17 Hans Petter Taugbøl Kragset 35

En viktig ferdighet: Google-fu 28.08.17 Hans Petter Taugbøl Kragset 36

Google-fu is defined as "skill in using search engines (especially Google) to quickly find useful information on the Internet." It is a somewhat tongue-in-cheek reference to kung-fu, which is generally perceived as requiring a high degree of skill to master in the western hemisphere. Apr 7, 2011 https://english.stackexchange.com/questions/19967/what-does-google-fu-mean 28.08.17 Hans Petter Taugbøl Kragset 37

Dere må lære dere å bruke internett og ressursene som mer der ute. Dere må utvikle en dømmekraft til å avgjøre hva som er en troverdig kilde, hva som er gode svar, og ikke minst hva som er relevant for dere når dere søker. Høres trivielt ut, ikke sant? 28.08.17 Hans Petter Taugbøl Kragset 38

Manualsider man-sider man-pages 28.08.17 Hans Petter Taugbøl Kragset 39

Hva er en manualside? Dokumentasjon som følger med software For C: Dokumentasjon for funksjonene i C-bibliotekene Altså de funksjonene du bruker som du ikke har skrevet selv fgets, printf, fopen, atoi, malloc $ man 3 fgets 28.08.17 Hans Petter Taugbøl Kragset 40

28.08.17 Hans Petter Taugbøl Kragset 41

Hva man-siden vi er på heter og hvilken seksjon av manualen den befinner seg i (her 3) 28.08.17 Hans Petter Taugbøl Kragset 42

Liste over funksjoner som er dekket i denne man-siden 28.08.17 Hans Petter Taugbøl Kragset 43

Signaturer for funksjoner i denne man-siden. Her finner du parameterlisten og returtypen. I denne man-siden er det 5 funksjoner 28.08.17 Hans Petter Taugbøl Kragset 44

Hvis noe må inkluderes med #include vil det stå spesifisert over signaturen 28.08.17 Hans Petter Taugbøl Kragset 45

Her står beskrivelse av alle funksjonen. Beskrivelsene er konsise og korrekte, men ofte ikke så utfyllende. 28.08.17 Hans Petter Taugbøl Kragset 46

Pass på å lese beskrivelsen av den funksjonen du er ute etter! For oss: fgets() 28.08.17 Hans Petter Taugbøl Kragset 47

DESCRIPTION fgets() char *fgets(char *s, int size, FILE *stream); fgets() reads in at most one less than size characters from stream and stores them into the buffer pointed to by s. 28.08.17 Hans Petter Taugbøl Kragset 48

DESCRIPTION fgets() char *fgets(char *s, int size, FILE *stream); fgets() reads in at most one less than size characters from stream and stores them into the buffer pointed to by s. Reading stops after an EOF or a newline. 28.08.17 Hans Petter Taugbøl Kragset 49

DESCRIPTION fgets() char *fgets(char *s, int size, FILE *stream); fgets() reads in at most one less than size characters from stream and stores them into the buffer pointed to by s. Reading stops after an EOF or a newline. If a newline is read, it is stored into the buffer. 28.08.17 Hans Petter Taugbøl Kragset 50

DESCRIPTION fgets() char *fgets(char *s, int size, FILE *stream); fgets() reads in at most one less than size characters from stream and stores them into the buffer pointed to by s. Reading stops after an EOF or a newline. If a newline is read, it is stored into the buffer. A terminating null byte ('\0') is stored after the last character in the buffer. 28.08.17 Hans Petter Taugbøl Kragset 51

Denne seksjonen gir informasjon om hvordan funksjonen returnerer 28.08.17 Hans Petter Taugbøl Kragset 52

Her beskrives både retur-verdi ved suksess og ved feil 28.08.17 Hans Petter Taugbøl Kragset 53

SEE ALSO-seksjonen inneholder navn på andre nyttige funksjoner som er relatert til denne. 28.08.17 Hans Petter Taugbøl Kragset 54

Oppsummert om man-sider SYNOPSIS Signaturer parametre og returtype DESCRIPTION Beskrivelse av oppførsel og bruk av parametre RETURN VALUE Beskriver returverdier ved suksess og feil SEE ALSO Andre, relaterte man-sider 28.08.17 Hans Petter Taugbøl Kragset 55

Bitoperasjoner 28.08.17 Hans Petter Taugbøl Kragset 56

Minnet i en datamaskin En rekke 0 og 1 Adresserbar En veldig lang streng Vi kan gjøre hva vi vil! Adresse Bitmønster (en byte) 00000000 0 0 0 0 0 0 0 0 00000001 0 0 0 0 0 0 0 0 00000002 0 0 0 0 0 0 0 0 00000003 0 0 0 0 0 0 0 0 00000004 0 0 0 0 0 0 0 0 00000005 0 0 0 0 0 0 0 0 00000006 0 0 0 0 0 0 0 0 00000007 0 0 0 0 0 0 0 0 00000008 0 0 0 0 0 0 0 0 00000009 0 0 0 0 0 0 0 0... 28.08.17 Hans Petter Taugbøl Kragset 57

Minnet i en datamaskin Vi kan skrive Adresse Bitmønster (en byte) 00000000 0 0 0 0 0 0 0 0 00000001 0 0 0 0 0 0 0 0 00000002 0 0 0 0 0 0 0 0 00000003 0 0 0 0 0 0 0 0 00000004 0 0 0 0 0 0 0 0 00000005 0 0 0 0 0 0 0 0 00000006 0 0 0 0 0 0 0 0 00000007 0 0 0 0 0 0 0 0 00000008 0 0 0 0 0 0 0 0 00000009 0 0 0 0 0 0 0 0... 28.08.17 Hans Petter Taugbøl Kragset 58

Minnet i en datamaskin Vi kan skrive skriv(3, 1010 1010) Adresse Bitmønster (en byte) 00000000 0 0 0 0 0 0 0 0 00000001 0 0 0 0 0 0 0 0 00000002 0 0 0 0 0 0 0 0 00000003 1 0 1 0 1 0 1 0 00000004 0 0 0 0 0 0 0 0 00000005 0 0 0 0 0 0 0 0 00000006 0 0 0 0 0 0 0 0 00000007 0 0 0 0 0 0 0 0 00000008 0 0 0 0 0 0 0 0 00000009 0 0 0 0 0 0 0 0... 28.08.17 Hans Petter Taugbøl Kragset 59

Minnet i en datamaskin Vi kan skrive skriv(3, 1010 1010) Vi kan lese les(3) => 1010 1010 Adresse Bitmønster (en byte) 00000000 0 0 0 0 0 0 0 0 00000001 0 0 0 0 0 0 0 0 00000002 0 0 0 0 0 0 0 0 00000003 1 0 1 0 1 0 1 0 00000004 0 0 0 0 0 0 0 0 00000005 0 0 0 0 0 0 0 0 00000006 0 0 0 0 0 0 0 0 00000007 0 0 0 0 0 0 0 0 00000008 0 0 0 0 0 0 0 0 00000009 0 0 0 0 0 0 0 0... 28.08.17 Hans Petter Taugbøl Kragset 60

Minnet i en datamaskin Vi kan skrive skriv(3, 1010 1010) Vi kan lese les(3) => 1010 1010 Vi kan flytte flytt(3, 8) Obs! Kopiering Adresse Bitmønster (en byte) 00000000 0 0 0 0 0 0 0 0 00000001 0 0 0 0 0 0 0 0 00000002 0 0 0 0 0 0 0 0 00000003 1 0 1 0 1 0 1 0 00000004 0 0 0 0 0 0 0 0 00000005 0 0 0 0 0 0 0 0 00000006 0 0 0 0 0 0 0 0 00000007 0 0 0 0 0 0 0 0 00000008 1 0 1 0 1 0 1 0 00000009 0 0 0 0 0 0 0 0... 28.08.17 Hans Petter Taugbøl Kragset 61

Bitoperasjoner Vi kan også endre hver enkelt bit Operasjon Operator NOT ~ AND & OR XOR ^ SHIFT RIGHT >> SHIFT LEFT << 28.08.17 Hans Petter Taugbøl Kragset 62

Bitoperasjoner De som har hatt INF1080 burde klare dette fint Operasjon Operator A B resultat NOT ~ 1010 0101 AND & OR XOR ^ SHIFT R >> SHIFT L << 28.08.17 Hans Petter Taugbøl Kragset 63

Bitoperasjoner De som har hatt INF1080 burde klare dette fint Operasjon Operator A B resultat NOT ~ 1010 0101 AND & 1111 1010 1010 OR XOR ^ SHIFT R >> SHIFT L << 28.08.17 Hans Petter Taugbøl Kragset 64

Bitoperasjoner De som har hatt INF1080 burde klare dette fint Operasjon Operator A B resultat NOT ~ 1010 0101 AND & 1111 1010 1010 OR 1010 1001 1011 XOR ^ SHIFT R >> SHIFT L << 28.08.17 Hans Petter Taugbøl Kragset 65

Bitoperasjoner De som har hatt INF1080 burde klare dette fint Operasjon Operator A B resultat NOT ~ 1010 0101 AND & 1111 1010 1010 OR 1010 1001 1011 XOR ^ 1010 1010 1111 0000 0101 1010 SHIFT R >> SHIFT L << 28.08.17 Hans Petter Taugbøl Kragset 66

Bitoperasjoner De som har hatt INF1080 burde klare dette fint Operasjon Operator A B resultat NOT ~ 1010 0101 AND & 1111 1010 1010 OR 1010 1001 1011 XOR ^ 1010 1010 1111 0000 0101 1010 SHIFT R >> 0101 0001 0010 SHIFT L << 28.08.17 Hans Petter Taugbøl Kragset 67

Bitoperasjoner De som har hatt INF1080 burde klare dette fint Operasjon Operator A B resultat NOT ~ 1010 0101 AND & 1111 1010 1010 OR 1010 1001 1011 XOR ^ 1010 1010 1111 0000 0101 1010 SHIFT R >> 0101 0001 0010 SHIFT L << 0101 0002 0100 28.08.17 Hans Petter Taugbøl Kragset 68

Bitoperasjoner De som har hatt INF1080 burde klare dette fint Operasjon Operator A B resultat NOT ~ 1010 0101 AND & 1111 1010 1010 OR 1010 1001 1011 XOR ^ 1010 1010 1111 0000 0101 1010 SHIFT R >> 0101 0001 0010 SHIFT L << 0101 0002 0100 28.08.17 Hans Petter Taugbøl Kragset 69

Det blir praktisk om alt dette i plenumstimene! 28.08.17 Hans Petter Taugbøl Kragset 70

Spørsmål? 28.08.17 Hans Petter Taugbøl Kragset 71