Info2P5/dualwand.c
2025-04-11 07:49:59 +02:00

54 lines
1.4 KiB
C

#include <stdio.h>
int umrechnen(int number);
void umrechnen2(int number, int bits);
int main() {
int number = 0;
int validInput = 0;
while (!validInput) {
printf("Bitte geben Sie eine Zahl ein: ");
if (scanf("%d", &number) != 1) {
printf("Ungueltige Eingabe. Bitte geben Sie eine gueltige Zahl ein.\n");
while (getchar() != '\n'); // Eingabepuffer leeren
} else {
validInput = 1;
}
}
if (number >= 0) {
int erg = umrechnen(number); // Positive Zahl in Binär umrechnen
printf("Binaerdarstellung: %d\n", erg);
} else {
int bits = sizeof(int) * 8 - 1; // Anzahl der Bits (z. B. 31 für 32-Bit-Systeme)
printf("Binaerdarstellung: ");
umrechnen2(number, bits); // Negative Zahl im Zweierkomplement ausgeben
printf("\n");
}
return 0;
}
int umrechnen(int number) {
if (number == 0) {
return 0; // Basisfall: Binärdarstellung von 0 ist 0
} else {
return number % 2 + 10 * umrechnen(number / 2); // Rekursive Umrechnung
}
}
void umrechnen2(int number, int bits) {
if (bits < 0) {
return; // Basisfall: Keine weiteren Bits zu prüfen
}
unsigned int mask = 1 << bits; // Maske für das aktuelle Bit
if (number & mask) {
printf("1");
} else {
printf("0");
}
return umrechnen2(number, bits - 1); // Rekursiver Aufruf für das nächste Bit
}