O
oiermann
Bekanntes Mitglied
Ich versuche mich gerade hier dran, aber irgendwie klappt das nicht.
Jetzt kommt für 338 das raus:
000000010101001
wobei das aber 010010101 wäre.
Mein Denkansatz funktioniert mit Stift und Papier, leider da nicht.
1. Prüfen ob die höchste zweierpotenz (2^15 in meinem Fall) in die Dezimalzahl passt, wenn ja Bit 15 = 1 und 2^15 von der Dezimalzahl abziehen.
Wenn nein, dann bit 15 = 0, nix abziehen.
2. Exponent um eins verringern (2^14..13...5...0) und wieder Schritt 1.
3. Wenn die Dezimalzahl auf 0 "geschrumpft" ist, dann iser fertig.
Woran liegt das? Was mache ich falsch?
Grüße
Code:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int dezz = 338;
char binz[255];
int exponent = 15;
do
{
if(dezz >= pow(2,exponent))
{
strcat(binz, "1");
dezz = (dezz - pow(2,exponent));
}
else
{
strcat(binz, "0");
}
exponent = (exponent - 1);
}while(dezz != 0);
printf("%s\n", binz);
}
000000010101001
wobei das aber 010010101 wäre.
Mein Denkansatz funktioniert mit Stift und Papier, leider da nicht.
1. Prüfen ob die höchste zweierpotenz (2^15 in meinem Fall) in die Dezimalzahl passt, wenn ja Bit 15 = 1 und 2^15 von der Dezimalzahl abziehen.
Wenn nein, dann bit 15 = 0, nix abziehen.
2. Exponent um eins verringern (2^14..13...5...0) und wieder Schritt 1.
3. Wenn die Dezimalzahl auf 0 "geschrumpft" ist, dann iser fertig.
Woran liegt das? Was mache ich falsch?
Grüße