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.
C-programmering ID120V William Sandqvist Länkad lista
Föreläsning 2 Datalogi för E1 2D1343
Flödeskontroll Satser i ett program utförs en och en efter varandra. Detta kallas sekvensiell flödeskontroll. Ofta är det dock nödvändigt att modifiera.
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; }
Programmering B PHP Lektion 2
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.
Föreläsning 7 Uttryck, Operatorer Och Kontrollflöden.
Föreläsning 3 Programmeringsteknik och Matlab DD1312
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 3. Flödesscheman while For Max/min-algoritm Datatyper Konvertering Dubbelloop (m. For)
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.
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
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.
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.
OOP&M - teori1 OOP – Föreläsning 7 (Sista oop I) Konstruktioner för att hantera upprepningar Kapitel 11.
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...
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!

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

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

Bit-operatorer ~ negation, bit för bit ~67 = ~= == -68 bitop_1.exe #include void BinPrint( unsigned tal ); int main( void ) { printf(" ~67 = ~(");BinPrint( 67 ); printf(") = ("); BinPrint( ~67 ); printf(") = %d", ~67 ); return 0; }

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 bitop_2.exe #include void BinPrint( unsigned tal ); int main( void ) { printf("67<<2 = (");BinPrint( 67 ); printf(")<<2 = ("); BinPrint( 67<<2 ); printf(") = %d", 67<<2 ); 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 bitop_3.exe #include void BinPrint( unsigned tal ); int main( void ) { printf("67u>>2 = (");BinPrint( 67u ); printf(")>>2 = ("); BinPrint( 67u>>2 ); printf(") = %d", 67u>>2 ); return 0; }

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

Bit-operatorer >> högerskift ( signed int, positivt tal ? ) 67u>>2 = >>2 = == ? bitop_5.exe #include void BinPrint( unsigned tal ); int main( void ) { printf("67>>2 = (");BinPrint( 67 ); printf(")>>2 = ("); BinPrint( 67>>2 ); printf(") = %d", 67>>2 ); return 0; }

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

Bit-operatorer >> högerskift ( signed int, negativa tal ( aritmetisk shift? ) -67u>>2= >>2 = == ? bitop_4.exe #include void BinPrint( unsigned tal ); int main( void ) { printf("-67>>2 = (");BinPrint( -67 ); printf(")>>2 = ("); BinPrint( -67>>2 ); printf(") = %d", -67>>2 ); return 0; }

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 BinPrint( unsigned tal ); int main( void ) { printf("-67&0xff =(");BinPrint(-67); printf(")&\n"); printf("\t (");BinPrint( 0xff );printf(") =\n"); printf("\t (");BinPrint( -67&0xff );printf(") ="); printf("%d", -67&0xff ); return 0; } and.exe

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 BinPrint( unsigned tal ); int main( void ) { printf("-67^0x0f =(");BinPrint(-67); printf(")^\n"); printf("\t (");BinPrint( 0x0f );printf(") =\n"); printf("\t (");BinPrint( -67^0x0f );printf(") ="); printf("%d", -67^0x0f ); return 0; } xor.exe

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 BinPrint( unsigned tal ); int main( void ) { printf("-67|0x0f =(");BinPrint(-67); printf(")|\n"); printf("\t (");BinPrint( 0x0f );printf(") =\n"); printf("\t (");BinPrint( -67|0x0f );printf(") ="); printf("%d", -67|0x0f ); return 0; } or.exe

Bit-operatorer exempel advent.exe

Bit-operatorer exempel /* ej ANSII-program, fungerar som dos-program, byglad LPT */ #include int main( void ){ unsigned PortNum = 0x0; /* LPT1 -> 0, LPT2 -> 1 */ unsigned mask = 0x01, delayTime = 100, forts = 1 /* sant */; forts

printf(" \ntangent 5 avslutar !"); while ( forts ){ if ( kbhit() ){ switch ( getch() ){ case ( '1' ) : mask = 0x01; break; /* */ case ( '2' ) : mask = 0x03; break; /* */ case ( '3' ) : mask = 0x07; break; /* */ case ( '4' ) : mask = 0x0f; break; /* */ case ( '+' ) :delayTime /= 2 ; if (delayTime < 1 ) delayTime = 1 ; break; case ( '-' ) : delayTime *= 2 ; if (delayTime > 1000 ) delayTime = 1000 ; break; case ( '5' ) : forts = 0 ; /* falskt, terminerar */ } _bios_printer(_PRINTER_WRITE, PortNum, rand() & mask ); delay(delayTime); _bios_printer(_PRINTER_WRITE, PortNum, rand() & mask ); delay(delayTime); } return 0; } Bit-operatorer exempel

databitar byglat, not busy, not out of paper parallellporten printerport

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 räntafkn.exe

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 kalkylat.exe

Komma - operatorn exempel void TabellPaSkarmen( int antalAr, float kapital ) { int ar ; printf("\n År Saldo\n == =====\n"); for ( ar = 1; ar <= antalAr; ar++ ) { if ( kapital > 0 ) kapital = kapital * ( 1 + RANTESATS/100 ); else kapital = kapital * 1/( 1 + RANTESATS/100 ); printf("%3d%11.2f\n", ar,kapital>0 ? kapital:-kapital); } return; } forts kalkylat.exe det är nästa bild som är intressant

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 kalkylat.exe 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.

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