This commit is contained in:
f0tt3r 2026-06-08 23:36:05 +02:00
parent ad11ab7b5f
commit e127c02007

View file

@ -1,18 +1,61 @@
#include <stdint.h>
#include <stdio.h> #include <stdio.h>
//TODO: Hier könnte etwas fehlen...
int main(void) void binaerzahl1A(int input);
{ void binaerzahl1B(int input);
int temp; void binaerzahl2(int input);
printf("Bitte gib eine Dezimalzahl ein: "); int32_t zweierkomplement(int32_t input);
scanf("%d", &temp);
binaerzahl(temp); //TODO: ist bis jetzt noch nicht definiert 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 * Musterlösung 1 a)
* Hierfür sollen Bitwise Operatoren und/oder Bitwise Shift genutzt werden.
*/ */
void binaerzahl(int input){ void binaerzahl1A(int input) {
//TODO 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;
} }