Compare commits

...

6 commits

Author SHA1 Message Date
716cb8d507 antworten, Hinweise 2026-06-08 23:22:31 +02:00
c723b55d05 aufgabe 2 und kommentaare 2026-06-08 22:22:47 +02:00
614fa462d8 größerer int 2026-06-08 21:09:41 +02:00
ca14ee97e4 add an input function 2026-06-08 21:01:48 +02:00
cad5b1e656 line 2026-06-08 20:44:32 +02:00
17e7f01fdf Readme 2026-06-08 20:43:30 +02:00
3 changed files with 70 additions and 7 deletions

52
README.md Normal file
View file

@ -0,0 +1,52 @@
# 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?
-> Überlauf.
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?
-> bevor Aufgabe 2, immernoch ein Überlauf.
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._
_Hinweis:_
_Überlauf._

BIN
hallo

Binary file not shown.

View file

@ -1,4 +1,5 @@
#include "hallo-welt.h" #include "hallo-welt.h"
#include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@ -9,15 +10,22 @@
void hallo_welt(void) { printf(HALLO); } void hallo_welt(void) { printf(HALLO); }
int zweierkomplement(int32_t i) { return ~i + 1; }
// use more then one int type // use more then one int type
const char *binaerzahl(uint8_t bin) { const char *binaerzahl(int32_t bin) {
char *str = malloc(sizeof(bin) * 8 + char *str = malloc(sizeof(bin) * 8 +
1); // Allocate 8 bits for actual data and 1 Bit for the \0 1); // Allocate 8 bits for actual data and 1 Bit for the \0
// sign indicating the end of the string // sign indicating the end of the string
bool is_negative;
if (!str) if (!str)
return NULL; return NULL;
uint8_t bb; if (bin < 0) {
printf("sizeof(bin) = %lu\n", sizeof(bin) * 8); bin = zweierkomplement(bin);
is_negative = true;
}
int32_t bb; // that way we keep the memory lighter
printf(is_negative ? "-" : "");
for (int i = sizeof(bin) * 8 - 1; i >= 0; i--) { for (int i = sizeof(bin) * 8 - 1; i >= 0; i--) {
bb = bin >> i; bb = bin >> i;
str[i] = (bb % 2 == 1) ? 1 : 0; str[i] = (bb % 2 == 1) ? 1 : 0;
@ -27,8 +35,11 @@ const char *binaerzahl(uint8_t bin) {
return str; return str;
} }
int main(void) { int getint(void) {
// hallo_welt(); uint32_t i;
char *in; printf("Geben Sie eine Dezimahlzahl ein: ");
printf(binaerzahl(8)); scanf("%u", &i);
return i;
} }
int main(void) { printf("%s", binaerzahl(getint())); }