54 lines
1.4 KiB
C
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
|
|
} |