diff --git a/hallo_welt.c b/hallo_welt.c index 779fd36..ca8ad27 100644 --- a/hallo_welt.c +++ b/hallo_welt.c @@ -1,18 +1,61 @@ +#include #include -//TODO: Hier könnte etwas fehlen... -int main(void) -{ - int temp; - printf("Bitte gib eine Dezimalzahl ein: "); - scanf("%d", &temp); - binaerzahl(temp); //TODO: ist bis jetzt noch nicht definiert +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 } /* - * Die Funktion soll die eingegebene Zahl als Binärzahl ausgegeben werden - * Hierfür sollen Bitwise Operatoren und/oder Bitwise Shift genutzt werden. + * Musterlösung 1 a) */ -void binaerzahl(int input){ - //TODO -} \ No newline at end of file +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); + } +} + +/* + * Musterlösung 2 + */ +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; +}