18. Bitmanipulationen. Bitoperationen Bitmasken

Ähnliche Dokumente
Mapra: C++ Teil 8. Felix Gruber, Michael Rom. IGPM, RWTH Aachen. 21. Juni 2016

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 16

5. Elementare Befehle und Struktogramme

Bit-Operationen KAPITEL 11

L6. Operatoren und Ausdrücke

RO-Tutorien 3 / 6 / 12

ESP Tutorium. Studienassistent: Ewald Moitzi. Gruppe 9

Weitere Operatoren und Datentypen. Speicherklassen. Speicherklassen: static

Einleitung. Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Kurzeinführung in C/C++

4 Schleifen und Dateien

Benutzerdefinierte und zusammengesetzte Datentypen

Operatoren und Ausdrücke

11. Übung Informatik II - Operatorfunktionen

Tutorium Rechnerorganisation

Dr. Monika Meiler. Inhalt

Informatik 1 ( ) D-MAVT F2010. Logik, Schleifen. Yves Brise Übungsstunde 4

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

Einführung in die Programmiersprache C und in den C166-Compiler

Zusammenfassung des Handzettels für Programmieren in C

Aufbau von Programmen/Dateien

Informatik für Elektrotechnik und Informationstechnik

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 18

DAP2-Programmierpraktikum Einführung in C++ (Teil 1)

Einführung in die Programmierung

Programmieren in C. C Syntax Datentypen, Operatoren und Kontrollstrukturen. Prof. Dr. Nikolaus Wulff

Kurze Einführung in die Programmiersprache C++ und in Root

Problem: Keine Integers in JavaCard. ToDo: Rechnen mit Bytes und Shorts

Elementare logische Operationen

Escape-Sequenzen. Dr. Norbert Spangler

Informatik Repetitorium SS Volker Jaedicke

2. Semester, 2. Prüfung, Lösung

FB Informatik. Fehler. Testplan

Angewandte Mathematik und Programmierung

Dateien, die nicht in das Projekt eingebunden sind, werden ohne Syntax highlight dargestellt. MiCoWi und µvision Seite 1 Uwe Wittenfeld

Klausur in Programmieren

Kap 09. Funktionen/Ergänzungen

Java für Anfänger Teil 3: Integer-Typen. Programmierkurs Manfred Jackel

Prinzipieller Grundaufbau eines einfachen C-Programmes

Teil IV. Grundlagen der Programmierung

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

Einführung in die Programmierung (EPR)

[E-1] Wolf, Jürgen: C von A bis Z. Galileo Computing, 3. Auflage,

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Klausur C++ #1 Jahr: 2001; Dozent: Dipl.Ing. Sorber

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Hello world. Sebastian Dyroff. 21. September 2009

01. Grundprinzipien der Vererbung

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Objektorientiertes Programmieren für Ingenieure

C-Vorrangregeln. Version Web:

Klausur in Programmieren

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2014/2015 Wirtschaftsingenieur Bachelor 4. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Selber Programmieren

Einstieg in die Informatik mit Java

C-Probeklausur (Informatik 1; Umfang: C, Teil 1; SS07)

MIKROPROZESSOR PROGRAMMIERUNG 8. VORLESUNG. LV-Nr SS INSTITUT FÜR ELEKTRONIK BIT

Quiz und Übungen. C++ Übung am 19. Mai 2016

Einführung in die Programmierung

C Grundlagen. Die Zunahme von integrierter Software innerhalb elektronischer Geräte bedingt enorme Entwicklungskosten.

Anweisungsblöcke (dazu zählen auch Programme) werden in geschweifte Klammern eingeschlossen.

Die Programmiersprache C Eine Einführung

Die Programmiersprache C99: Zusammenfassung

Übung HP Beispielaufgaben 3

Kurzeinführung in C++

Einführung in die C++ Programmierung für Ingenieure

Klausur in Programmieren

Klausur zur Vorlesung Grundlagen der C++-Programmierung

Betriebssysteme: Konzepte, Dienste, Schnittstellen (Betriebssysteme und betriebssystemnahe Programmierung)

Informatik B von Adrian Neumann

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Schleifenanweisungen

Übungen zu Architektur Eingebetteter Systeme. Teil 1: Grundlagen. Blatt : Grundlagen des Cyclic redundancy code (CRC)

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Zahlendarstellung Logikfunktionen Register Eingänge Infrarot senden TSOP-Effekte Weiterführendes U Abend 3:

Nun kommt etwas wirklich Abgefahrenes. Wenn Sie zu den Leuten gehören, denen Logikrätsel keinen

Inhaltsverzeichnis. Grundbegriffe der C-Programmierung Für den HI-TECH C-Compiler

1.8 Kontrollstrukturen 73. default : ziffer = 0; if (ziffer > 0) { cout << "Ziffer = " << ziffer; else { cout << "keine römische Ziffer!

Steueranweisungen. Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/

Programmieren in C / C++ Grundlagen C 2

Hochschule Darmstadt Informatik-Praktikum WS 2016/2017 WIng Bachelor 4. Aufgabenblatt Modularisierung, Funktionen, Unterprogramme

Microcontroller Kurs Programmieren Microcontroller Kurs/Johannes Fuchs 1

12. Vererbung. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

Programmieren in C/C++ und MATLAB

Klausurvorbereitung Lösung

JAVA-Datentypen und deren Wertebereich

C++ Teil 1. Sven Groß. 9. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil 1 9. Apr / 19

Programmieren in C. Eigene Datentypen per typedef und Strukturen. Prof. Dr. Nikolaus Wulff

Z:\Informatik 3\Labor_GINF3\Labor_01-Sonstiges.txt

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 8. Zufallszahlen Generatoren Anwendungen

Kap 4. Befehle und Struktogramme

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden

Einführung in die Programmierung

Ulla Kirch Peter Prinz C+ + Lernen und professionell anwenden. mitp

Sin-Funktion vgl. Cos-Funktion

Überladen von Operatoren

Primitive Datentypen

Übungen zu C++ Kapitel 1

Modul 122 VBA Scribt.docx

Microcontroller Praktikum SS2010 Dipl. Ing. R. Reisch

Transkript:

18. Bitmanipulationen Bitoperationen Bitmasken

Anwendung von Bits Statusanzeigen bei Ein-/Ausgabe (Stream-Klassen) Zugriffsrechte auf Dateien Maschinensteuerung/Gerätetreiber Status-/Steuerungsangaben für Anlagen Dr. Norbert Spangler / Grundlagen der Informatik 27.05.2007 2

Bitoperatoren & bitweises UND bitweises ODER ^ bitweises exklusives ODER (XOR) ~ Komplement NICHT << Links-Shift >> Rechts-Shift Die Operanden müssen vom ganzzahligen Typ sein. Die Bitoperatoren sollte man nicht mit den logischen Operatoren && bzw. verwechseln, welche stets auf die gesamte Zahl wirken und nicht auf die einzelnen Bits. Dr. Norbert Spangler / Grundlagen der Informatik 27.05.2007 3

Wahrheitstafeln UND Ergebnis 0 & 0 0 0 & 1 0 1 & 0 0 1 & 1 1 ODER Ergebnis 0 0 0 0 1 1 1 0 1 1 1 1 XOR Ergebnis 0 ^ 0 0 0 ^1 1 1 ^ 0 1 1 ^ 1 0 NICHT Ergebnis ~0 1 ~0 1 Dr. Norbert Spangler / Grundlagen der Informatik 27.05.2007 4

Aufgabe: Löschen von Bits Die Bits 3-7 und 10-12 in einem Operanden sollen gelöscht werden. Erzeugung einer Maske, welche an den zu löschenden Bitpositionen 0 hat und ansonsten 1 1110 0011 0000 0011 = E303 In C++: short maske=0xe303, operand=0xc1f1; Anwendung des UND-Operators operand 1100 0001 1111 0001=C1F1 ergebnis = operand & maske maske 1110 0011 0000 0011=E303 ergebnis 1100 0001 0000 0001=C101 Dr. Norbert Spangler / Grundlagen der Informatik 27.05.2007 5

Aufgabe: Löschen von Bits Spezialfall: alle Bits bis auf eines sind 0 (maske hat nur 1 gesetztes Bit). Anwendung des UND-Operators operand 1100 0001 1111 0001=C1F1 ergebnis = operand & maske maske 0000 0001 0000 0000=0101 ergebnis 0000 0001 0000 0000=0100 Ergebnis: Das Bit an der entsprechenden Position im Operanden wird übernommen und alle anderen werden gelöscht. D.h. ist das Ergebnis 0, war dieses Bit 0, ist das Ergebnis ungleich 0, war das Bit 1. Damit können einzelne Bits geprüft werden. Dr. Norbert Spangler / Grundlagen der Informatik 27.05.2007 6

Aufgabe: Setzen von Bits Die Bits 0-2,8-9,13-15 in einem Operanden sollen gesetzt werden. Erzeugung einer Maske, welche an den zu setzenden Bitpositionen 1 hat und ansonsten 0. 1110 0011 0000 0111 = E303 In C++: short maske=0xe303, operand=0xc1f1; Anwendung des ODER-Operators operand 1100 0001 1111 0001=C1F1 ergebnis = operand maske maske 1110 0011 0000 0011=E303 ergebnis 1110 0011 1111 0011=E3F3 Dr. Norbert Spangler / Grundlagen der Informatik 27.05.2007 7

Aufgabe: Invertieren von Bits Die Bits 0-2,8-9,13-15 in einem Operanden sollen invertiert werden. Erzeugung einer Maske, welche an den zu invertierenden Bitpositionen 1 hat und ansonsten 0 1110 0011 0000 0111 = E303 In C++: short maske=0xe303, operand=0xc1f1; Anwendung des XOR-Operators operand 1100 0001 1111 0001=C1F1 ergebnis = operand ^ maske maske 1110 0011 0000 0011=E303 ergebnis 0010 0010 1111 0010=22F2 Dr. Norbert Spangler / Grundlagen der Informatik 27.05.2007 8

Aufgabe: Invertieren aller Bits Anwendung des Nicht-Operators (anstelle der Variante mit einer Maske, in der alle Bitpositionen gesetzt sind + Anwendung des XOR-Operators) In C++: short operand=0xc1f1; ergebnis = ~operand operand 1100 0001 1111 0001=C1F1 ergebnis 0011 1110 0000 1110=3E0E Dr. Norbert Spangler / Grundlagen der Informatik 27.05.2007 9

Zusammenfassung operand & maske operand maske operand ^ maske Alle Bits, die in maske 0 sind, werden gelöscht Alle Bits, die in maske 1 sind, werden gesetzt Alle Bits, die in maske 1 sind, werden invertiert ~ maske Alle Bits werden invertiert Dr. Norbert Spangler / Grundlagen der Informatik 27.05.2007 10

Beispielprogramm #include <iomanip> #include<iostream> using namespace std; void main() { unsigned short operand=0xc1f1, maske=0xe303,ergebnis; // Bits loeschen ergebnis=maske & operand; cout << hex <<uppercase<< operand<<" & "<<maske<<" = "<< ergebnis <<endl; // Bits setzen ergebnis=maske operand; cout << operand<<" "<<maske<<" = "<< ergebnis <<endl; // Bits invertieren ergebnis=maske ^ operand; cout << operand<<" ^ "<<maske<<" = "<< ergebnis <<endl; // alle Bits invertieren ergebnis=~operand; cout << " ~ "<<operand<<" = "<< ergebnis <<endl; } Dr. Norbert Spangler / Grundlagen der Informatik 27.05.2007 11

Links- und Rechts-Shift Die Shiftoperatoren << und >> verschieben die Bits des linken Operanden um die Anzahl Positionen, die im rechten Operanden angegeben sind. Die herausgeschobenen Bits gehen verloren, es wird mit 0 aufgefüllt. y = x >> 4; // es wird um 4 Bits nach rechts verschoben und mit links mit 0 // aufgefüllt. z = x << 8; // es wird um 8 Bits nach links verschoben und rechts mit 0 // aufgefüllt. Beispiel: x=0x0064; y=x>>4; //Ergebnis ist 0x0006 z=x<<8;//ergebnis ist jetzt 0x0600 Dr. Norbert Spangler / Grundlagen der Informatik 27.05.2007 12

Bitstrukturen/Bitfelder Bitfelder werden als Datenelemente einer Klasse definiert. Beispiel: struct Feld { unsigned sensor1 : 1; unsigned sensor2 : 1; unsigned schalter1:1; unsigned :4; unsigned strom :1; unsinged status :4; unsigned id :4; } ; Dr. Norbert Spangler / Grundlagen der Informatik 27.05.2007 13

Bitfelder Die Struktur besteht aus 16 Bits. Die ersten 3 Bitfelder sind sensor1,sensor2 und schalter1 und haben je 1 Bit. Die nächsten 4 Bits werden nicht genutzt; Danach folgt das Bitfeld strom (1 Bit), dann die Bitfelder status und id zu je 4 Bits. Deklaration: Feld geraet; Zugriff: if ( geraet.sensor1 )... geraet.strom=0; usw. Die Maximallaenge ist ein Speicherwort ( z.b. 4 Bytes) Dr. Norbert Spangler / Grundlagen der Informatik 27.05.2007 14

Übungsaufgabe Es soll das Parity-Bit (für gerade Parity) einer Zahl bestimmt werden. Bei gerader Parity wird das Parity-Bit zu einem Datum so bestimmt, dass die Anzahl aller Bits inkl. dem Parity.Bit gerade ist. Dr. Norbert Spangler / Grundlagen der Informatik 27.05.2007 15

Lösung Es soll das Parity-Bit einer Zahl bestimmt werden. Lösung mit Schleife int parity(unsigned short n) { unsigned short par=0; while ( n!=0 ) { par^=(n & 0x0001); n>>=1; } return par; } Dr. Norbert Spangler / Grundlagen der Informatik 27.05.2007 16

Lösung Es soll das Parity-Bit einer Zahl bestimmt werden. Lösung mit Schleife int parity(unsigned short n) { unsigned short par=0; while ( n!=0 ) { par^=(n & 0x0001); n>>=1; } return par; } Lösung mit Rekursion? Dr. Norbert Spangler / Grundlagen der Informatik 27.05.2007 17

Lösung Es soll das Parity-Bit einer Zahl bestimmt werden. Lösung mit Rekursion int parity(unsigned short n) { if ( n==0 ) return 0; else return parity(n>>1) ^ (n&0x0001); } Dr. Norbert Spangler / Grundlagen der Informatik 27.05.2007 18