diff --git a/hallo b/hallo index e53e9fc..8883a6d 100755 Binary files a/hallo and b/hallo differ diff --git a/hallo-welt.c b/hallo-welt.c index 640887b..0433806 100644 --- a/hallo-welt.c +++ b/hallo-welt.c @@ -1,4 +1,5 @@ #include "hallo-welt.h" +#include #include #include #include @@ -9,14 +10,22 @@ void hallo_welt(void) { printf(HALLO); } +int zweierkomplement(int32_t i) { return ~i + 1; } + // use more then one int type -const char *binaerzahl(uint32_t bin) { +const char *binaerzahl(int32_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 + bool is_negative; if (!str) return NULL; - uint8_t bb; + if (bin < 0) { + 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--) { bb = bin >> i; str[i] = (bb % 2 == 1) ? 1 : 0; @@ -28,6 +37,7 @@ const char *binaerzahl(uint32_t bin) { int getint(void) { uint32_t i; + printf("Geben Sie eine Dezimahlzahl ein: "); scanf("%u", &i); return i; }