Int nach Zeichenkette str in Binaerdarstellung

Dieses Thema im Forum "C/C++" wurde erstellt von brahma, 12.11.2006.

  1. brahma

    brahma Netzpirat

    Dabei seit:
    06.12.2005
    Beiträge:
    709
    Zustimmungen:
    0
    Ort:
    Münsterland
    Ich seh den Wald gerade vor lauter Bäumen nicht, deswegen muss ich euch mal mit was vlt. völlig banalem auf den Keks gehen. Es geht um mein Praktikum C, dort soll ein Taschenrechner gebaut werden, der beim Aufruf die Rechenoperation als Argument bekommt. Das soweit OK, klappt alles. Aber mein Prof möchte auch gerne eine Ausgabe in Binaerform haben....

    Aufgabe konkret:
    So, vorgegeben ist dann das:
    Code:
    /* Schreibt Binaerdarstellung von x nach str */
    void itob(int x, char str[]);
    
    Daraus habe ich gemacht:

    Code:
    /* Schreibt Binaerdarstellung von x nach str */
    void itob(int x, char str[]){
    	char strg[]={};
    	int rest=2, i=0;
    	// Berechnung der Binär-Stellen. Achtung: Reichenfolge falsch
    	while(x > 1 ){
    		rest=x%2;
    		x=x/2;
    		strg[i]= (char) rest;
    //		printf("Binär: %i Rest:%i\n", strg[i], x);
    		i++;
    	}
    	i--;
    	// Stringfolge drehen für richtige Darstellung
    	strg[i]= (char) x;
    	while(i>=0){
    		int j=0;
    		str[j]= '0' + strg[i];
    //		printf("String: %i\n",str[j]);
    		i--;
    		j++;
    	}
    }
    Also die einzelnen Binaerstellen kann ich ja mit Modulo und normaler Teilung herausbekommen, dummerweise natuerlich in falscher Reihenfolge, so dass ich diese wieder drehen muss.

    Leider sieht die Ausgabe meine Programms, wenn ich es mit
    aufrufe, so aus:

    Ich habs momentan nur für die erste Zahl gemacht, damit die Zwischenausgabe nicht zu unübersichtlich wird.

    Hab dazu 2, naja, 3 Fragen:
    1. Hab ich Fehler gemacht bei der Umrechnung Int -> Binaer?
    2. Geht das auch einfacher? Es sollen keine C-Funktionen benutzt werden, stdio.h ist die einzige zu includierende Datei.
    3. wie drehe ich die Reihenfolge von str so dass der Binaerstring richtig rum ist?

    Danke schonmal fürs lesen :D
     
  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. #2 heady, 12.11.2006
    Zuletzt bearbeitet: 13.11.2006
    heady

    heady Routinier

    Dabei seit:
    13.12.2005
    Beiträge:
    424
    Zustimmungen:
    0
    Ort:
    im Herzen Europas
    meiner meinung nach isses besser, wenn du bitmasken benutzt...
    du iterierst durch von 2^(obere grenze)...bis 2^0(=1) und überprüfst mit dem & operator, ob die maske passt...wenn ja kommt eine 1 in den string sonst 0...
    und mit bitoperation kannst du auch wieder die letzte maske von deiner zahl entfernen...

    [EDIT:] ich habe folgendes beispiel ausgearbeitet, dass bei mir funktioniert:
    Code:
    #include<stdio.h>
    #include<string.h>
    
    #define MAXBITS 32
    
    void itob ( int, char * );
    
    int main ( ) {
        char bits[MAXBITS+1];
        itob( 500, bits );
        puts( bits );
        return 0;
    }
    
    void itob ( int nr, char * str ) {
        int bitnr, maske;
    
        for( bitnr=MAXBITS; bitnr >=0; bitnr-- ) {
            maske = 1 << bitnr;
            str[MAXBITS-bitnr]= ( nr & maske ? '1' : '0' );
            nr &= ~maske;
        }
        str[MAXBITS+1]='\0';
    }
     
  4. brahma

    brahma Netzpirat

    Dabei seit:
    06.12.2005
    Beiträge:
    709
    Zustimmungen:
    0
    Ort:
    Münsterland
    Hm,das kann ich auch mal probieren, aber leider:

    Ich muss gleich mal gucken in wie weit ich das umsetzen kann demnach ;)
     
  5. heady

    heady Routinier

    Dabei seit:
    13.12.2005
    Beiträge:
    424
    Zustimmungen:
    0
    Ort:
    im Herzen Europas
    so gesehen, brauch ich die string.h nur zum ausgeben mit puts...
     
  6. brahma

    brahma Netzpirat

    Dabei seit:
    06.12.2005
    Beiträge:
    709
    Zustimmungen:
    0
    Ort:
    Münsterland
    Hey, das klappt super, vielen Dank.

    Hab aber noch ein paar Verständnisfragen, Bitoperationen sind noch nicht so mein ding ;)

    Code:
    maske = 1 << bitnr;
    str[MAXBITS-bitnr]= ( nr & maske ? '1' : '0' );
    nr &= ~maske;
    Was zur Hölle geht da genau ab? Was machen das ? und das : genau?

    Und was ist das?
    Code:
    #define MAXBITS 32
    Oder besser gesagt wie heisst das? Ich muss gleich nochmal googeln :D
     
  7. #6 supersucker, 13.11.2006
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    Stichwort: ternärer operator, ist ne verkürzte if-else Anweisung.

    Beispiel (Pseudocode) :

    Code:
    a = (x == 1 ? y : z)
    heisst:

    Wenn x gleich 1 setze a auf y, sonst auf z.

    ist eine Präprozessoranweisung, setzt einen Konstante namens MAXBITS auf 32.
     
  8. brahma

    brahma Netzpirat

    Dabei seit:
    06.12.2005
    Beiträge:
    709
    Zustimmungen:
    0
    Ort:
    Münsterland
    Vielen Dank euch beiden, darauf kann ich aufbauen damit ich sowas demnächst auch selber hinbekomme... :D
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. heady

    heady Routinier

    Dabei seit:
    13.12.2005
    Beiträge:
    424
    Zustimmungen:
    0
    Ort:
    im Herzen Europas
    joa habs auch nicht anders gelernt...hoffe, dass das programm nicht allzu verbuggt ist, hab schon seit 2 jahren nix mehr in c/c++ programmiert
     
  11. brahma

    brahma Netzpirat

    Dabei seit:
    06.12.2005
    Beiträge:
    709
    Zustimmungen:
    0
    Ort:
    Münsterland
    Hm, das klappte wunderbar, bis auf 2 Fehler:

    In der letzten Zeile hattest Du die Anzahl der Elemente um 1 Überschritten, während in der 4. Zeile der Wert 1 zu hoch war. Sah ganz witzig aus in der Praxis, es hatten alle Binärzahlen nur 50% der Numerischen Werte ;)
     
Thema:

Int nach Zeichenkette str in Binaerdarstellung

Die Seite wird geladen...

Int nach Zeichenkette str in Binaerdarstellung - Ähnliche Themen

  1. Textdatei nach bestimmer Zeichenkette durchsuchen

    Textdatei nach bestimmer Zeichenkette durchsuchen: Hi, ich verscuhe gerade mir ein Script zu erstellen, das es mir erleichtert einen Virtuellen Host zu erstellen. Nun weiß ich aber leider nicht...
  2. Keine Benachrichtigungen im Vollbild Modus

    Keine Benachrichtigungen im Vollbild Modus: Arch Linux Plasma 5.8 Weiss einer ob das gehen sollte, bzw kann mal einer testen ob es bei ihm geht, gerne auch mit anderen kde/plasma versionen....
  3. SRV Records nicht erstellt nach dcpromo

    SRV Records nicht erstellt nach dcpromo: Hallo zusammen, leider sind beim Join meines 2. DC in eine Samba 4 Domäne die SRV-DNS Records nicht erstellt worden... Hatte jemand schonmal das...
  4. CentOS 7: Falsche Metric bei regelbasiertem Routing nach Server-Reboot

    CentOS 7: Falsche Metric bei regelbasiertem Routing nach Server-Reboot: Hallo zusammen Ich möchte unseren existierenden SFTP Server durch einen neuen Server mit CentOS 7 ersetzen. Da der Server einerseits direkt via...
  5. Nicht erkannte Zeichen nach Update

    Nicht erkannte Zeichen nach Update: Hi, nachdem ich mein Kali Linux geupdated habe, ist mir aufgefallen dass viele Zeichen auf verschiedenen Nutzeroberflächen nur fehlerhaft...