Raptorchicken
Banned
- Registriert
- Nov. 2012
- Beiträge
- 696
hallo,
ich habe folgende aufgabe: ich soll ein programm schreiben, das mir den betrag einer dezimalzahl in form einer binärzahl ausgibt. die ausgabe soll dabei exakt 31 zeichen (also nullen oder einsen) lang sein. (soll heissen, wenn ich "2" eingebe soll die ausgabe nicht "10" lauten, sondern 0000...00010). es interessieren also nur die 31 bits nach dem vorzeichenbit (von bit 30 bis bit 0). ob die eingegebene zahl tatsächlich positiv ist muss nicht überprüft werden.
das hab ich bisher schon:
kurz die (vorgegebene) idee dahinter: erst das 30. bit nach ganz rechts verschieben, dann das 29 usw.
währenddessen jeweils die "bitwise and 0x00000001" drüberlegen, sodass alle einträge links vom aktuell betrachtetem bit verschwinden. und die jeweils aktuelle übrigbleibende null oder eins wird dann ausgegeben.
es funktioniert auch, aber nur "begrenzt":
es klappt nur mit geraden zahlen. wenn ich eine ungerade zahl eingebe ist der erste eintrag stets eine "1", alles was hinten steht stimmt aber wieder. wie kommt das denn? o0
als beispiel: für "18" kommt richtig "0000...00010010" raus, für "17" aber gibt es mir "1000...00010001" aus. stimmta also bis auf die 1 am anfang auch. *confused*
wär nett wenn mir da jemand schnell helfen könnte, danke
ich habe folgende aufgabe: ich soll ein programm schreiben, das mir den betrag einer dezimalzahl in form einer binärzahl ausgibt. die ausgabe soll dabei exakt 31 zeichen (also nullen oder einsen) lang sein. (soll heissen, wenn ich "2" eingebe soll die ausgabe nicht "10" lauten, sondern 0000...00010). es interessieren also nur die 31 bits nach dem vorzeichenbit (von bit 30 bis bit 0). ob die eingegebene zahl tatsächlich positiv ist muss nicht überprüft werden.
das hab ich bisher schon:
Code:
#include <stdio.h>
int main()
{
int a, b, c, d, i;
printf("Geben Sie bitte eine Dezimalzahl ein: ");
scanf("%i", &a);
for(i=30 ; i>=0 ; c = (--i))
{
d = a >> c;
b = d & 0x00000001;
printf("%i", b);
}
}
kurz die (vorgegebene) idee dahinter: erst das 30. bit nach ganz rechts verschieben, dann das 29 usw.
währenddessen jeweils die "bitwise and 0x00000001" drüberlegen, sodass alle einträge links vom aktuell betrachtetem bit verschwinden. und die jeweils aktuelle übrigbleibende null oder eins wird dann ausgegeben.
es funktioniert auch, aber nur "begrenzt":
es klappt nur mit geraden zahlen. wenn ich eine ungerade zahl eingebe ist der erste eintrag stets eine "1", alles was hinten steht stimmt aber wieder. wie kommt das denn? o0
als beispiel: für "18" kommt richtig "0000...00010010" raus, für "17" aber gibt es mir "1000...00010001" aus. stimmta also bis auf die 1 am anfang auch. *confused*
wär nett wenn mir da jemand schnell helfen könnte, danke
Zuletzt bearbeitet: