2026-06-08 23:36:05 +02:00
|
|
|
#include <stdint.h>
|
2026-06-08 23:28:36 +02:00
|
|
|
#include <stdio.h>
|
|
|
|
|
|
2026-06-08 23:36:05 +02:00
|
|
|
void binaerzahl1A(int input);
|
|
|
|
|
void binaerzahl1B(int input);
|
|
|
|
|
void binaerzahl2(int input);
|
|
|
|
|
int32_t zweierkomplement(int32_t input);
|
|
|
|
|
|
|
|
|
|
int main(void) {
|
|
|
|
|
int temp;
|
|
|
|
|
printf("Bitte gib eine Dezimalzahl ein: ");
|
|
|
|
|
scanf("%d", &temp);
|
|
|
|
|
binaerzahl2(
|
|
|
|
|
temp); // Hier muss der Funktionsaufruf entsprechend angepasst werden
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Musterlösung 1 a)
|
|
|
|
|
*/
|
|
|
|
|
void binaerzahl1A(int input) {
|
|
|
|
|
for (int8_t i = 0; i < 8; i++) { // Wir geben 8 mal aus:
|
|
|
|
|
uint8_t erg =
|
|
|
|
|
(input
|
|
|
|
|
<< i); // Wir verschieben so, dass das aktuelle Bit am Anfang steht
|
|
|
|
|
erg = erg >> 7; // Da wir uint8_t nutzen, wird der Rest abgeschnitten und
|
|
|
|
|
// wir verschieben zurück, sodass wir nur 0 oder 1 ausgeben
|
|
|
|
|
printf("%d", erg);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Musterlösung 1 b)
|
|
|
|
|
*/
|
|
|
|
|
void binaerzahl1B(int input) {
|
|
|
|
|
for (uint8_t i = 0; i < 32; i++) {
|
|
|
|
|
uint32_t erg = (input << i);
|
|
|
|
|
erg = erg >> 31;
|
|
|
|
|
printf("%d", erg);
|
|
|
|
|
}
|
2026-06-08 23:28:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
2026-06-08 23:36:05 +02:00
|
|
|
* Musterlösung 2
|
2026-06-08 23:28:36 +02:00
|
|
|
*/
|
2026-06-08 23:36:05 +02:00
|
|
|
void binaerzahl2(int input) {
|
|
|
|
|
if (input < 0) {
|
|
|
|
|
input = zweierkomplement(input);
|
|
|
|
|
printf("-");
|
|
|
|
|
}
|
|
|
|
|
for (uint8_t i = 0; i < 32; i++) {
|
|
|
|
|
uint32_t erg = (input << i);
|
|
|
|
|
erg = erg >> 31;
|
|
|
|
|
printf("%d", erg);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int32_t zweierkomplement(int32_t input) {
|
|
|
|
|
input = ~input;
|
|
|
|
|
input++;
|
|
|
|
|
return input;
|
|
|
|
|
}
|