Compare commits
2 commits
main
...
placeholde
| Author | SHA1 | Date | |
|---|---|---|---|
| ad11ab7b5f | |||
| 62c0529e16 |
5 changed files with 65 additions and 41 deletions
47
README.md
Normal file
47
README.md
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
# c-01-bits
|
||||
|
||||
**Wichtig: Nur die Musterlösungen anzuschauen hat nicht
|
||||
ansatzweise den gleichen Lerneffekt wie vorheriges Bearbeiten der Aufgaben.**
|
||||
|
||||
## Aufgabe 0: Intro (Übersetzen von C-Programmen)
|
||||
|
||||
### 0a)
|
||||
|
||||
Erstelle eine eigene Hallo-Welt.c Datei und kompiliere diese.
|
||||
|
||||
### 0b)
|
||||
|
||||
Anschließend soll ein `#define` benutzt werden, um ein Makro für die "Hallo-Welt" Expression zu erstellen. Diese Makro soll dann in einer extra Funktion genutzt werden, welche in der main-Funktion aufgerufen wird. Nutze zur Definition dieser neuen Funktion und des Makros eine eigene Header Datei (mit ifndef).
|
||||
|
||||
## Aufgabe 1: Variablen, Flow Control, Bitwise Shift (Programmfluss)
|
||||
|
||||
### 1a)
|
||||
|
||||
Schreibe die Funktion binaerzahl in der .c-Datei, welche eine Zahl zwischen
|
||||
0 und 255 als Binärzahl ausgibt. Hierfür sollte der Bitwise Shift (<</>>) und
|
||||
wenn nötig die Bitwise Operatoren (&,|,^,~) verwendet werden. Außerdem
|
||||
sollen mindestens zwei verschiedene Datentyp aus stdint genutzt werden.
|
||||
Ob für die Definition ein Funktionsprototyp oder
|
||||
eine eigene Header Datei genutzt wird, ist hierbei egal.
|
||||
|
||||
### 1b)
|
||||
|
||||
Was passiert, wenn die Zahl größer als 255 ist?
|
||||
|
||||
Passe die Funktion so an, dass auch größere Zahlen (0 bis 232-1) als Binärzahlen ausgegeben werden können.
|
||||
|
||||
## Aufgabe 2: Bitwise Operatoren
|
||||
|
||||
Was passiert, wenn die Zahl negativ ist?
|
||||
|
||||
Erweitere die Funktion erneut, sodass auch negative Zahlen bearbeitet werden. Hierbei soll bei der Ausgabe erst ein Minus stehen und dahinter die positive Binärzahl. Beispiel:
|
||||
|
||||
Bitte gib eine Dezimalzahl ein: -3
|
||||
-00000011
|
||||
|
||||
_Hinweis: Die negativen Zahlen werden im Zweierkomplement gespeichert. Es kann also hilfreich sein, eine Hilfsfunktion zu schreiben, welche das Zweierkomplement von Zahlen bestimmt._
|
||||
|
||||
---
|
||||
|
||||
_Zur Erinnerung:_
|
||||
_Das Zweierkomplement wird gebildet, indem die Bits invertiert werden und anschließend 1 zur Zahl addiert wird._
|
||||
BIN
hallo
BIN
hallo
Binary file not shown.
34
hallo-welt.c
34
hallo-welt.c
|
|
@ -1,34 +0,0 @@
|
|||
#include "hallo-welt.h"
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifndef HALLO
|
||||
#define HALLO "Hallo Welt"
|
||||
#endif
|
||||
|
||||
void hallo_welt(void) { printf(HALLO); }
|
||||
|
||||
// use more then one int type
|
||||
const char *binaerzahl(uint8_t bin) {
|
||||
char *str = malloc(sizeof(bin) * 8 +
|
||||
1); // Allocate 8 bits for actual data and 1 Bit for the \0
|
||||
// sign indicating the end of the string
|
||||
if (!str)
|
||||
return NULL;
|
||||
uint8_t bb;
|
||||
printf("sizeof(bin) = %lu\n", sizeof(bin) * 8);
|
||||
for (int i = sizeof(bin) * 8 - 1; i >= 0; i--) {
|
||||
bb = bin >> i;
|
||||
str[i] = (bb % 2 == 1) ? 1 : 0;
|
||||
printf("%d", str[i]);
|
||||
}
|
||||
str[sizeof(bin)] = '\0';
|
||||
return str;
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
// hallo_welt();
|
||||
char *in;
|
||||
printf(binaerzahl(8));
|
||||
}
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
#include <stdio.h>
|
||||
|
||||
#ifndef HALLO
|
||||
#define HALLO "Hallo Welt!"
|
||||
#else
|
||||
printf("HALLO ist schon definiert!");
|
||||
#endif
|
||||
18
hallo_welt.c
Normal file
18
hallo_welt.c
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
#include <stdio.h>
|
||||
//TODO: Hier könnte etwas fehlen...
|
||||
|
||||
int main(void)
|
||||
{
|
||||
int temp;
|
||||
printf("Bitte gib eine Dezimalzahl ein: ");
|
||||
scanf("%d", &temp);
|
||||
binaerzahl(temp); //TODO: ist bis jetzt noch nicht definiert
|
||||
}
|
||||
|
||||
/*
|
||||
* Die Funktion soll die eingegebene Zahl als Binärzahl ausgegeben werden
|
||||
* Hierfür sollen Bitwise Operatoren und/oder Bitwise Shift genutzt werden.
|
||||
*/
|
||||
void binaerzahl(int input){
|
||||
//TODO
|
||||
}
|
||||
Loading…
Reference in a new issue