Dezimal in Binär in C - brauche Hilfe

Dieses Thema im Forum "C/C++" wurde erstellt von m0erk, 16.12.2008.

  1. m0erk

    m0erk Grünschnabel

    Dabei seit:
    26.11.2008
    Beiträge:
    5
    Zustimmungen:
    0


    kann mir jemand sagen warum er das array nicht dreht? er stellt die dezimalzahl immer falsch herum dar.. versuchts z.b. mit 255 müsste 01111111 sein... aber scheinbar dreht er das array nicht oder falsch oder keine ahnung.. wenn ich die schleife ganz raus lasse, dann steht die selbe zahl also schätz ich da passt was beim drehen nicht...

    wäre nett wenn jemand nen tipp hat.. thx m0erk
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. seim

    seim seim oder nicht seim?

    Dabei seit:
    08.09.2006
    Beiträge:
    909
    Zustimmungen:
    0
    Ort:
    /mnt/reallife
    Prinzip:

    Zahl 137 als Binären String ausgeben.

    137 div 128 = 1 Rest 9
    9 div 64 = 0 Rest 9
    9 div 32 = 0 Rest 9
    9 div 16 = 0 Rest 9
    9 div 8 = 1 Rest 1
    1 div 4 = 0 Rest 1
    1 div 2 = 0 Rest 1
    1 div 1 = 1 Rest 0

    Binär: 10001001

    --

    Schreib am besten eine do .. while (Rest != 0) Schleife dafür und am Ende wird immer das Ergebnis in ein Array geschrieben
     
  4. m0erk

    m0erk Grünschnabel

    Dabei seit:
    26.11.2008
    Beiträge:
    5
    Zustimmungen:
    0
    mh.. das leuchtet mich ehrlich gesagt nicht so ein..

    dein berechnungsweg bringt zwar auch das richtige ergebnis, ich habe die berechnung aber schon in meinem programm integriert. das was jetzt nicht klappt, ist die drehung des arrays..

    mein system funktioniert so:

    137 / 2 = 68 Rest 1
    68 / 2 = 34 Rest 0
    34 / 2 = 17 Rest 0
    17 / 2 = 8 Rest 1
    8 / 2 = 4 Rest 0
    4 / 2 = 2 Rest 0
    2 / 2 = 1 Rest 0
    1 / 2 = 0 Rest 1

    Die Binärzahl steht also falschrum im Array.. jetzt möchte ich sie tauschen und das klappt bei mir nicht.. könnt ihr mir sagen wieso?
    ich würde das berechnungsprinzip gerne beibehalten...
     
  5. #4 Plinzen, 17.12.2008
    Plinzen

    Plinzen Foren As

    Dabei seit:
    11.04.2007
    Beiträge:
    96
    Zustimmungen:
    0
    Hi,

    nachdem du ja ein Array hast. Wäre evtl. das Füllen bzw. das Ausgeben des Arrays von hinten nach vorne eine Möglichkeit?Die vorderen Elemente könntest du ja mit 0 Initialisieren.

    Gruß!
     
  6. #5 floyd62, 17.12.2008
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Sieht für mich so aus, als ob du deinen Array zunächst, wie gewünscht, umdrehst, dann aber nicht aufhörst, wenn du ihn halb durchlaufen hast, sondern bis zum Schluss weitermachst, und damit die Austauscherei wieder rückgängig machst.

    Du könntest natürlich auch gleich den Array B von hinten her befüllen, dann sparst du dir das ganze Drehen ...

    ;-)
     
  7. seim

    seim seim oder nicht seim?

    Dabei seit:
    08.09.2006
    Beiträge:
    909
    Zustimmungen:
    0
    Ort:
    /mnt/reallife
    Wenn du nur das Array umdrehen willst..

    1234567

    tausche "erstes +0" mit "letztes -0"

    7234561

    tausche "erstes +1" mit "letztes -1"

    7634521

    tausche "erstes +2" mit "letztes -2"

    7654321

    until "erstes +x" == "letztes -x"

    Edit:
    Ok das mit dieser until Bedingung gilt nur für eine ungerade Zahl von Stellen..
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  9. #7 x0r, 17.12.2008
    Zuletzt bearbeitet: 17.12.2008
    x0r

    x0r Bitschubser

    Dabei seit:
    20.12.2005
    Beiträge:
    169
    Zustimmungen:
    0
    Ort:
    Berlin
    Mahltid,


    wie wär es denn damit:

    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <errno.h>
    
    
    /* prototypes */
    
    
    void PushBinAsArray(int iInputVAL);
    
    /* functions */
    
    void PushBinAsArray(int iInputVAL)
    {
    
    	int iCount = 0, iRest = 0, iTempVAL = iInputVAL;
    	int iBitDepth = 0; /* feldbreite */
    
    	if(iInputVAL<=255)
    			iBitDepth = 8; /* 1 Byte */
    	
    	if( (iInputVAL<=65535) && (iInputVAL>255))
    			iBitDepth = 16; /* 2 Byte */
    	
    	if( (iInputVAL<=4294967295) && (iInputVAL>65535))
    			iBitDepth = 32; /* 4 Byte */
    
    	if(iInputVAL>4294967295) /* 4 Byte Feldgrenze ohne bin. Konjugation*/
    	{
    		printf("\n\nerror: cannot assign long int (greater than 4 billion)\n");
    		exit(1);
    	}
    
    
    	int *aiReturnVAL = new int[iBitDepth];
    	for(iCount =0; iCount<iBitDepth; iCount++)
    		aiReturnVAL[iCount] = 0; /* feld mit nullen auffüllen */
    
    	iCount = iBitDepth-1; /* endkriterium für elemtentausch in den feldern*/
    
    	while(iTempVAL >0) /* ist eingangswert größer NULL ?? dann mach folgendes */
    	{
    		iRest = iTempVAL %2; /* modulo z. Basis 2 entweder 0 o. 1*/
    		aiReturnVAL[iCount] = iRest;
    		iTempVAL /= 2;
    		iCount--;
    	}
    
    	printf("\nDEC: String = %i\nDUAL: String: = ", iInputVAL); 
    
    	for(iCount = 0; iCount < iBitDepth; iCount++) /* dualzahl von 'hinten nach vorn' zeichenweise ausgeben*/
    		printf("%i", aiReturnVAL[iCount]);
    
    	printf("\n\nquitting\n");
    }
    
    
    int main(int argc, char** argv)
    {
    	PushBinAsArray(atoi(argv[1]));
    	return 0;
    }
    
    Ist zwar ein C++ Schnippslet aber Du kannst ja die 'new' gegen 'malloc'-Statements austauschen.
    Aber probier es ruhig mal mit Klarnamen für Deine VARs und den Code hin und wieder mal einrücken erhöht die Lesbarkeit drastisch :D

    just my 2cents ...

    MfG
     
  10. #8 m0erk, 17.12.2008
    Zuletzt bearbeitet: 17.12.2008
    m0erk

    m0erk Grünschnabel

    Dabei seit:
    26.11.2008
    Beiträge:
    5
    Zustimmungen:
    0
    erstmal danke für die ganzen antworten, ich habs jez soweit am laufen.

    @x0r, deinen code verstehe ich leider nur zur hälfte. hab erst vor einiger zeit mit C angefangen für die uni, aber gundsetzlich hab ich die lösung auch verstanden denke ich. mein code is nachm copy eingefügt aber nachm posten nichtmehr.. und tab funktioniert nich ^^

    ich habs jetz einfach falschrum ausgegeben..

    mfg m0erk
     
Thema: Dezimal in Binär in C - brauche Hilfe
Besucher kamen mit folgenden Suchen
  1. lese_f programmieren

    ,
  2. dezimal in binär c array

    ,
  3. umwandlung dezimalzahlen / binärzahlen ( do-while-schleife)

Die Seite wird geladen...

Dezimal in Binär in C - brauche Hilfe - Ähnliche Themen

  1. Converter für Binär, Oktal, Dezimal und Hexal

    Converter für Binär, Oktal, Dezimal und Hexal: Moin, ich bereite mich zur Zeit auf meine Prüfungen für die Uni vor und da habe ich einen kleinen Converter geschrieben, der die Zahlen...
  2. sort -n, Dezimalpunkt/-komma und Locale

    sort -n, Dezimalpunkt/-komma und Locale: Hallo zusammen, Will mittels "sort -n" eine Text-Datei (ASCII) mit Fliesskommazahlen (getrennt durch Dezimalpunkt) sortieren, jedoch macht das...
  3. SFC hält Auslieferung von binären ZFS-Modulen für GPL-Verletzung

    SFC hält Auslieferung von binären ZFS-Modulen für GPL-Verletzung: Die Software Freedom Conservancy hält Canonicals Plan, das Dateisystem ZFS als binäres Modul ab Ubuntu 16.04 mitzuliefern, für eine...
  4. Erneute Diskussion um binäre Firmware bei Debian

    Erneute Diskussion um binäre Firmware bei Debian: Ein Thema, das Debian seit Jahren bewegt, sind binäre Firmware-Blobs. Bei einem runden Tisch mit rund 40 Interessierten bei der am vergangenen...
  5. Ärger um binäre Dateien in Chromium

    Ärger um binäre Dateien in Chromium: Wie einer kürzlich veröffentlichten Untersuchung eines Entwicklers entnommen werden kann, lädt der freie Chromium-Browser im Hintergrund unfreie,...