Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.

Slides:



Advertisements
Liknande presentationer
Villkor Booelska operatorer Villkorsatser Switchsatser Villkor och annat.
Advertisements

void hittaMax(int tal[], int antal, int *pmax) { int i; ??=tal[0]; for(i=1;i??) ??=tal[i]; } int main() { int v[]={1,2,3,4,2}; int.
Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens.
Programstruktur: C för enchipsdatorer
Funktioner och programorganisation
Föreläsning 3 Repetition Operatorer Styrstrukturer Deklaration och anrop av metoder.
De fundamentala datatyperna
Operatorer.
#include void fun(char s[]) { int i=-1; while(s[++i]!=0) { if('a'
Föreläsning 2. Operatorer Tilldelning Kodblock { } if – satsen Logiska uttryck Att programmera.
Om Java C =>Java syntax variabler metoder färdiga klasser
C-programmering ID120V William Sandqvist Länkad lista
Programmering i C# 2. Inledande detaljer.
Programmering B PHP Lektion 2
INTRODUKTION TILL PROGRAMMERING
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Några småsaker switch break, continue, goto Kommentarer.
William Sandqvist C:s minnesmodell.
Föreläsning 7 Uttryck, Operatorer Och Kontrollflöden.
Internet A Javaskript.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 4 ( ) INNEHÅLL: -Logiska opertorer -Poster.
Problemlösning Veckodagsproblemet Gissa talet Siffersumman.
Anders Sjögren Mer om datatyper. Anders Sjögren const det finns ett elegantare sätt att skapa konstanter i C än sättet med makro som vi använt tidigare.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
Modulär programutveckling
Anders Sjögren Pekare. Anders Sjögren Skapa ett program som byter plats på två heltal Pekare.
Anders Sjögren Bitfält Kompakt datalagring i delar av bytes, ett fält av bits StackBytes Heap.
1 Föreläsning 5 Programmeringsteknik och Matlab 2D1312/2D1305 Repetition Metoder Array API och klassen ArrayList.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Anders Sjögren Bitfält exempel Nu kommer ett förbättrat program. Det är funktions- uppdelat och kan lägga till poster som lagras på fil.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 2 ( ) INNEHÅLL: -Variabler och datatyper -Tilldelning av variabler -Aritmetiska.
Problemlösningsmetodik
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Tabeller -Villkorssatser -Repetitionssatser.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
William Sandqvist C-programmering ID120V Stack och Kö William Sandqvist
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 4 ( ) INNEHÅLL: -Logiska operatorer och logiska uttryck -Referenstyper.
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
Föreläsning 1 Om kursen Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Språket för inbyggda system 2
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Repetitionssatser: do-satsen och for-satsen -Operatorer:
OOP F13:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 13 Repetition variabler, selektion och iteration.
Anders Sjögren Deklarationsområde och funktioner.
Föreläsning 17 Repetition. Källkodsformat Unicode används åäöμψζ tillåtna i namn på identifierare Inte alla miljöer klarar av det Källkod Bytekod Java.
Föreläsning 3 Villkorssatsen if Slingor: while och for Felsökning.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
F2 1 Programmeringsteknik, 4p vt-00 Kommentarer Allt mellan /* och */ Varje kommentar byts ut mot en blank av kompilatorn /* Exempel på uttryck, tilldelningsoperatorn.
Kronljusströmställaren 0, 1, 2, 3
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
Anders Sjögren Data (i primärminnet) som en länkad lista datatypen för varje element i listan är en struktur, post ( struct )
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
Föreläsning 3 Operatorer Flödeskontroll Primitiva datatyperKlasser i API och egna klasser int double byte float char boolean short long String BufferedReader.
OOP&M - teori1 OOP&M – Föreläsning 5 kap 8-13 Operatorer,typkonvertering, booleska operatorer, if och else.
Anders Sjögren Mer om datatyper. Anders Sjögren const det finns ett elegantare sätt att skapa konstanter i C än sättet med makro som vi använt tidigare.
Anders Sjögren Enkelt program med funktion /* two_func.c - a program that uses two functions in one file */ /* from Stephen Prata C Primer Plus ISBN
Selektion jämförande och logiska operatorer
Anders Sjögren Operatorer. Anders Sjögren Operand(er)
Anders Sjögren Minnen, variabler, att lagra i primärminnet forts. Den här bilden känner ni igen sedan tidigare. Vi skall fortsätta att prata variabeltyper.
Språket för inbyggda system. C:s verktygslåda är välfylld! William Sandqvist
Anders Sjögren Modulär programutveckling. Anders Sjögren Ett programmeringsprojekt, flera personer utvecklar ett program Vi ska utveckla ett ränteberäkningsprogram.
Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska...
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
Anders Sjögren Funktioner något in och något annat ut.
KPP053, HT2015 MATLAB, Föreläsning 4
Föreläsning 3: Booleans, if, switch
Iteration – Repetitionssats - while
Presentationens avskrift:

Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn

Logiska operatorer det finns tre logiska operatorer i C && OCH ||ELLER !ICKE

Selektion nästlade if - satser printf("\n År Saldo\n == =====\n"); for ( ar = 1; ar <= ANTAL_AR ; ar++ ) { if ( kapital > 0 ) kapital = kapital * ( 1 + RANTESATS/100 ); else kapital = kapital * 1/( 1 + RANTESATS/100 ); /* enheter i tabellen */ if ( -10 < kapital && kapital < 10 ) printf("%3d%11.2f kr\n", ar, kapital>0 ? kapital : -kapital); else if ( -100 < kapital && kapital < 100 ) printf("%3d%11.2f da(deka)kr\n", ar, (kapital>0 ? kapital :... else if ( < kapital && kapital < 1000 ) printf("%3d%11.2f h(hekto)kr\n", ar, (kapital>0 ? kapital :... else printf("%3d%11.2f kkr\n", ar, (kapital>0 ? kapital :.... } return 0; } ”gör antingen A eller B eller C.....”, endast ett alternativ utförs! minns ni det här exemplet? Provkör!

Selektion nästlade if - satser resultat av en programkörning, exekveringsresultat!

Logiska operatorer /* enheter i tabellen */ if ( -10 < kapital && kapital < 10 ) printf("%3d%11.2f kr\n", ar, kapital>0 ? kapital : -kapital); else if ( -100 < kapital && kapital < 100 ) printf("%3d%11.2f da(deka)kr\n", ar, (kapital>0 ? kapital : -kapital)/10); else if ( < kapital && kapital < 1000 ) printf("%3d%11.2f h(hekto)kr\n", ar, (kapital>0 ? kapital : -kapital)/100); else printf("%3d%11.2f kkr\n", ar, (kapital>0 ? kapital : -kapital)/1000); om villkoret -10<kapital OCH villkoret kapital<10 bägge är sanna så blir hela villkoret sant och printf() utförs.

Logiska operatorer (villkor_1 && villkor_2 && villkor_3 &&...) –alla villlkoren skall vara sanna för att hela uttrycket skall bli sant –villkor_1 OCH villkor_2 OCH villkor_3 OCH.... (villkor_1 || villkor_2 || villkor_3 ||...) –något, eller flera, av villkoren skall vara sant för att hela uttrycket skall bli sant –villkor_1 ELLER villkor_2 ELLER villkor_3 ELLER.. (!villkor) –hela uttrycket sant om villkor är falskt eller falskt om villkor är sant –ICKE villkor

Bit-operatorer påverkar enskilda bitar i minnet ~ negation, bit för bit << vänsterskift >> högerskift & OCH, bit för bit ^ exklusiv ELLER, bit för bit | ELLER, bit för bit 2 bytes16 bits bit short int

Bit-operatorer ~ negation, bit för bit ~67 = ~= == ?? Vad tror du det blir?

Bit-operatorer ~ negation, bit för bit ~67 = ~= == -68 #include void bin_prnt_byte(unsigned int); void bin_prnt_short(unsigned int); int main( void ) { printf(" ~67 = ~("); bin_prnt_short( 67 ); printf(") = ("); bin_prnt_short( ~67 ); printf(") = %d", ~67 ); system( " PAUSE " ); return 0; } Se kurswebben för: bin_prnt_short()

Windows kalkylator = - 68

Bit-operatorer << vänsterskift 67<<2 = <<2 = == ?? Vad tror du det blir?

Bit-operatorer << vänsterskift ( logisk skift vänster = 0:r in ) 67<<2 = <<2 = == 268 #include void bin_prnt_byte(unsigned int); void bin_prnt_short(unsigned int); int main( void ) { printf(" 67<<2 = ("); bin_prnt_short( 67 ); printf(")<<2 = ("); bin_prnt_short( 67<<2 ); printf(") = %d", 67<<2 ); system( " PAUSE " ); return 0; }

Bit-operatorer >> högerskift 67u>>2 = >>2 = == ?? Vad tror du det blir?

Bit-operatorer >> högerskift ( logisk skift höger = 0:r in ) 67u>>2 = >>2 = == 16 #include void bin_prnt_byte(unsigned int); void bin_prnt_short(unsigned int); int main( void ) { printf(" 67u>>2 = ("); bin_prnt_short( 67u ); printf(")<<2 = ("); bin_prnt_short( 67u<<2 ); printf(") = %d", 67u<<2 ); system( " PAUSE " ); return 0; }

Bit-operatorer >> högerskift ( signed int, positivt tal ? ) 67>>2 = >>2 = == ? Det är ospecifiserat vad som händer med en signed int.

Bit-operatorer >> högerskift ( signed int, positivt tal ? ) 67>>2 = >>2 = == ? #include void bin_prnt_byte(unsigned int); void bin_prnt_short(unsigned int); int main( void ) { printf(" 67>>2 = ("); bin_prnt_short( 67 ); printf(")<<2 = ("); bin_prnt_short( 67<<2 ); printf(") = %d", 67<<2 ); system( " PAUSE " ); return 0; } Tydligen skiftades 0:or in, men detta är inget som ANSI-C lovar!

Bit-operatorer >> högerskift ( signed int, negativa tal ( aritmetisk shift? ) -67>>2= >>2 = == ? Det är ospecifiserat vad som händer med en signed int.

Bit-operatorer >> högerskift ( signed int, negativa tal ( aritmetisk shift? ) -67>>2= >>2 = == ? #include void bin_prnt_byte(unsigned int); void bin_prnt_short(unsigned int); int main( void ) { printf(" -67>>2 = ("); bin_prnt_short( -67 ); printf(")<<2 = ("); bin_prnt_short( -67<<2 ); printf(") = %d", -67<<2 ); system( " PAUSE " ); return 0; } Det blev aritmetiskt skift med den här kompilatorn (inget som ANSI-C lovar)…

Bit-operatorer & OCH-operatorn, bit för bit -67&0xff= & = = = ? Vad tror du det blir?

Bit-operatorer & OCH-operatorn, bit för bit -67&0xff= & = = = 189 #include void bin_prnt_byte(unsigned int); void bin_prnt_short(unsigned int); int main( void ) { printf(" -67&0xff = ("); bin_prnt_short( -67 ); printf(") &0xff = ("); bin_prnt_short( -67&0xff ); printf(") = %d", -67&0xff ); system( " PAUSE " ); return 0; }

Windows kalkylator

And-mask -67 & 0xff tal mask OCH, AND: De bitpositioner som är 0 i masken nollställer motsvarande bitpositioner i talet. På det sättet kan man påverka enskilda bitar i en variabel.

Bit-operatorer ^ exklusiv ELLER-operatorn, bit för bit -67^0x0f= ^ = = = ? Vad tror du det blir?

Bit-operatorer ^ exklusiv ELLER-operatorn, bit för bit - 67^0x0f= ^ = = = -78 #include void bin_prnt_byte(unsigned int); void bin_prnt_short(unsigned int); int main( void ) { printf(" -67^0x0f = ("); bin_prnt_short( -67 ); printf(") ^0x0f = ("); bin_prnt_short( -67^0x0f ); printf(") = %d", -67^0x0f ); system( " PAUSE " ); return 0; }

Exor-mask -67 ^ 0x0f tal mask Exor: De bitpositioner som är 1 i masken togglar (=byter värde på) motsvarande bitpositioner i talet. De bitpositioner som är 0 i masken lämnas oförändrade. På det sättet kan man byta värde på enskilda bitar i en variabel.

Bit-operatorer | ELLER-operatorn, bit för bit -67|0x0f= | = = = ? Vad tror du det blir?

Bit-operatorer | ELLER-operatorn, bit för bit -67|0x0f= | = = = -65 #include void bin_prnt_byte(unsigned int); void bin_prnt_short(unsigned int); int main( void ) { printf(" -67|0x0f = ("); bin_prnt_short( -67 ); printf(") |0x0f = ("); bin_prnt_short( -67|0x0f ); printf(") = %d", -67|0x0f ); system( " PAUSE " ); return 0; }

Eller, OR - mask -67 | 0x0f tal mask Or: De bitpositioner som är 1 i masken ettställer motsvarande bitpositioner i talet. På det sättet kan man ettställa enskilda bitar i en variabel.

Bit-operatorer exempel

databitar byglat, not busy, not out of paper parallellporten printerport Parallellportar försvinner mer och mer från datorerna, vi byter från PC till en inbyggnadsprocessor PIC

Adventljus med PIC16F690

PIC-processorn? Ej enligt ANSI-standarden, men lämpliga storlekar för en pytteliten 8-bitsprocessor som har bitinstruktioner är: bit 1/8 Byte, char 1 Byte (unsigned), int 1Byte (signed) long 2 Bytes (signed)

C-kod (ej ANSI) för PIC-processorn printf("Advent: 1, 2, 3, 4 Light flicker: +,-\r\n",0); while(1) { if( receiver_flag ) /* Character received? */ { choice = getchar(); switch (choice) { case '1': mask = 0x01; /* */ printf("%c First\r\n", choice); break; case '2': mask = 0x03; /* */ printf("%c Second\r\n", choice); break; case '3': mask = 0x07; /* */ printf("%c Third\r\n", choice); break; case '4': mask = 0x0F; /* */ printf("%c Fourth\r\n", choice); break;

fortsättning … case '+': if(speed > 0) speed --; else speed = 0; printf("%c Increasing flicker, ", choice); printf("delay %u\r\n", speed); break; case '-': if(speed < 254) speed ++; else speed = 255; printf("%c Decreasing flicker, ", choice); printf("delay %u\r\n", speed); break; default : mask = 0x00; /* */ printf("%c Choose advent: 1, 2, 3, 4 Light flicker: +,-r\n",choice); } } flicker = rand(); flicker &= mask; PORTC = flicker; delay(5); /* minimum delay */ delay(speed); } }

Adventstider … flicker = rand(); flicker &= mask; PORTC = flicker; mask & Slumptal rand() Fladdrande ljuslågor …

”Annons” för IL131V Digitalteknik med PIC Digitalteknik med PIC-processor 7.5 hp IL131V. 12 veckor ht/vt 1 kväll i veckan. Sök kursen på studera.nu !

Adress - operatorn &

/* Beräknar kapitaltillväxt på x år framåt eller bakåt */ #include #define RANTESATS 8.5 void TabellPaSkarmen( int, float ); int main ( void ) { floatkapital ; intantalAr; printf("Insatt kapital och antal år ?(--> )--> "); scanf("%f%d", &kapital, &antalAr); TabellPaSkarmen( antalAr, kapital ); return 0; } Adress - operatorn Maskinkod programmet Heap Stack Bytes antalAr=1 kapital =100 funktionen scanf() är en funktion som vill ha reda på var i primärminnet ( adressen ) det inlästa skall lagras. Detta erhålls m h a adressoperatorn & xxxxxxxx

Komma - operatorn,

Komma - operatorn exempel /* Beräknar kapitaltillväxt på x år framåt eller bakåt */ #include #define RANTESATS 8.5 void TabellPaSkarmen( int, float ); void Kalkylator( void ); int main ( void ) { floatkapital ; intantalAr; printf("Insatt kapital och antal år ?(--> )--> "); scanf("%f%d", &kapital, &antalAr); TabellPaSkarmen( antalAr, kapital ); Kalkylator(); return 0; } minns ni exemplet med kalkylatorn i? forts

void Kalkylator( void ) /* Enkel kalkylator */ { float x, y; char c; printf( "\nKalkylator som klarar de fyra räknesätten t ex 3+2\n"); printf( "A, avslutar\n"); while (printf("-->"), scanf("%f%c%f", &x, &c, &y ) == 3) { switch(c) { case '+': printf("%f\n", x + y); break; case '-': printf("%f\n", x - y); break; case '*': printf("%f\n", x * y); break; case '/': if (y != 0) printf("%f\n", x / y); else printf("Division med noll\n"); break; default: printf("Felaktig operator\n"); break; } return; } Komma - operatorn exempel Se ”kommat” i while-satsen. Den gör att man kan exekvera flera uttryck i parentesen, från vänster till höger. Resultatet av det sista uttrycket är upprepningsvillkoret

Punkt - operatorn. Denna operator har vi ännu inte stött på, den kommer senare. Den används för att nå ett delminne i ett större minne. Inte undra på att programmen vi skriver på övningar och laborationer kraschar när varenda skiljetecken vi skriver eller glömmer är en operator !

högst prioritet har de unära postfixoperatorerna [] (). -> sedan kommer de unära prefixoperatorerna & * + - ~ ! (typnamn) därefter de aritmetiska ( rikning V till H ) * / % + - skiftoperatorer ( rikning V till H ) > jämförelseoperatorerna ( rikning V till H ) = == != bit-operatorerna ( rikning V till H ) & ^ | logiska operatorer ( rikning V till H ) && || villkorsoperatorn ( rikning H till V ) ? uttryck : tilldelningsoperatorer ( rikning H till V ) = *= /= %= += -= >= &= ~= |= kommaoperatorn ( riktning V till höger ), Operatorprioritet

Slut