[C] dezimal -> binär, Denkfehler im Code

Diskutiere [C] dezimal -> binär, Denkfehler im Code im Developer Network Forum im Bereich Hardware & Software Forum; Ich versuche mich gerade hier dran, aber irgendwie klappt das nicht. #include <stdio.h> #include <math.h> #include <stdlib.h> #include...
  • [C] dezimal -> binär, Denkfehler im Code Beitrag #1
O

oiermann

Bekanntes Mitglied
Dabei seit
30.12.2005
Beiträge
1.342
Reaktionspunkte
0
Ort
Milchstrasse
Ich versuche mich gerade hier dran, aber irgendwie klappt das nicht.
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);
}
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
 
  • [C] dezimal -> binär, Denkfehler im Code Beitrag #2
U

UnimatrixZero

Bekanntes Mitglied
Dabei seit
27.06.2001
Beiträge
645
Reaktionspunkte
0
Jetzt kommt für 338 das raus:
000000010101001
wobei das aber 010010101 wäre.
Das erste Ergebnis ist schon fast richtig. Dein Fehler liegt bei Punkt 3

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.
Bitte beachten, daß 2^15 = 32768 = 0x8000 = -1, wenn ein int 16 Bit breit ist.

3. Wenn die Dezimalzahl auf 0 "geschrumpft" ist, dann iser fertig.
Ist er nicht. Wenn die Zahl z.B. gerade ist (wie 338), dann vergißt Dein Programm die letzte binäre 0 (wie hier geschehen). Das ist Faktor 2. Du mußt also immer alle Exponenten durchlaufen.

Noch ein Tip: Sowas erledigt man sehr viel einfacher mit einer Bitmaske. Einfach mit 0x8000 anfangen, dann testen, ob das Bit in der Maske in der Zahl gesetzt ist und entsprechend dem Ergebnis eine 1 oder 0 ausgeben. Dann die Maske um 1 Bit nach rechts schieben und wieder testen. Solange, bis die Maske 0x0001 ist.
 
  • [C] dezimal -> binär, Denkfehler im Code Beitrag #3
O

oiermann

Bekanntes Mitglied
Dabei seit
30.12.2005
Beiträge
1.342
Reaktionspunkte
0
Ort
Milchstrasse
Vieeeel einfacher. Nach ewigem rumfrickeln, hab ich nen "Counter" eingebaut:

Code:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>

int main()
{
        int dezz = 8;
        char binz[255];
        int exponent = 14;
        int counter = 15;

        do
        {
                if(dezz >= pow(2,exponent))
                {
                        strcat(binz, "1");
                        dezz = (dezz - pow(2,exponent));
                }
                else
                {
                        strcat(binz, "0");
                }
                exponent = (exponent - 1);
                counter--;
        }while(counter != 0);
        printf("%s\n", binz);
}
Die Ausgabe:
 
Thema:

[C] dezimal -> binär, Denkfehler im Code

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.179
Beiträge
1.579.172
Mitglieder
55.878
Neuestes Mitglied
Satan666
Oben