Umwandlung von Dez nach Bin



  • Hi,

    ich wollt von euch wissen wie ich eine Zahl z.B. a = 128 , mit printf binär ausgeben kann. Also es soll nicht 128 ausgegeben werden sonder ...
    halt 1000 0000. Geht das mit printf überhaupt?
    Und dann noch eine Frage, kann ich es auch so ausgeben das die einsen in der zahl mit gelb und die nullen mit weiss dargestellt werden ? 😕

    Und noch eine letzte Frage ist es möglich bzw. gibt es vorgefertigte funktionen in C mit denen man sagen kann eine zahl geht nur bis 128 und wenn sie z.B. sagen wir mal a = 1 ist und man dann mit a =<< 1 das bit bis nach 128 schiebt das es dann beim nächsten durchgang "wenn man es in einer schleife macht" es wieder automatisch auf 1 gesetzt wird ?! oder würde es die 1 dann nicht weiter verschieben wenn das limit erreicht ist .

    danke. 🙂



  • Hi,

    mit printf geht es leider nicht direkt. Wir hatten das Problem aber schon ein paar mal, so dass du hier mit einer Suche fündig wirst.

    Farben kannst du mit Standard C nicht ändern, das geht nur Betriebssystemabhängig.

    Dritte Frage: Unter Windows gibs zum Beispiel rotl.



  • unter was genau soll ich den suchen bzw wie soll der Suchbegriff aussehen

    edit: hab gesucht unter ansi c . da hat keiner das selbe problem klar es geht um zahlensysteme aber ... kann man es mit nem anderen print machen ? ich finde nix weis es niemand ? 😞



  • marke eigenbau fetzt ab stärksten:

    void bitput(int a, int len)
    {
       for(int i = len-1; i >= 0; --i)
          printf("%d", a>>i & 1);
    }
    

    die funktion basiert auf bitshiften. ich gebe immer das erste bit aus (i & 1 macht ne bitmaske drauf) und dann verschieb ich den integer ein bit nach rechts. dann wieder von vorne.

    mit ein bisschen kreativität kannst du das auch auf beliebigen speicher anwenden, mit unbegrenzter bitzahl.



  • /**
    * Konvertiert ein Int (4 Byte) in eine Binaerzahl, die in binArray
    * abgespeichert wird.
    * @author Denis Fiedler
    * @version 27-Nov-2003
    * @param val der zu kovertierende Wert
    * @param binArray enthaelt das gewandelte Int in Binaerform(
    jedes Element stellt ein Bit dar)
    * @return immer 0
    */
    int intToBinArray(unsigned val, byte binArray[])
    {
    int i;
    int tmp;

    for(i=31;i>-1;i--)
    {
    tmp=(int)(val/(pow(2, i)));
    if(tmp>=1)
    {
    binArray[i]=1;
    tmp=(int)(val-pow(2, i));
    val=tmp;
    }
    else
    {
    binArray[i]=0;
    }
    }
    return 0;
    }

    Man kann natürlich auch eine Länge übergeben, ich habe es im Moment auf 32-Bit beschränkt.
    Achso, byte hatte ich definiert als unsigned char



  • Javan_cabana schrieb:

    Und noch eine letzte Frage ist es möglich bzw. gibt es vorgefertigte funktionen in C mit denen man sagen kann eine zahl geht nur bis 128 und wenn sie z.B. sagen wir mal a = 1 ist und man dann mit a =<< 1 das bit bis nach 128 schiebt das es dann beim nächsten durchgang "wenn man es in einer schleife macht" es wieder automatisch auf 1 gesetzt wird ?!

    Wie bereits angedeutet, könntest du zB rotieren statt zu shiften. Wie man sowas plattformunabhängig macht, findest du zB hier.



  • ok, danke für die antworten ! was die ausgabe betrifft hab ich ne andere lösung gefunden ist so ähnlich wie eure nur nicht so kompliziert danke trozdem.
    👍


Anmelden zum Antworten