[C] Dezimalzahl in Binärdarstellung mit Bitshift operationen



  • --------------------------------------------------------------------------------

    Hallo,

    für mich is das alles absolutes Neuland und würd mich über jede Hilfe freuen.
    Ich möchte ein Programm schreiben, dass die Binärpräsentation eines Integers ausgeben soll. Die einzelnen Bytes sollen mit "|" getrennt werden und der Integer soll vorher eingelesen werden.
    Vielleicht könnt ihr mir ein paar Lösungsvorschläge geben.

    für int =0 sollte es dann so ausschaun
    00000000|00000000|00000000|00000000

    Thx für eure hilfe...



  • mit folgender Zeile prüfst du, ob ein bestimmtes Bit gesetzt ist:

    int a = 5;
    int bit = 15;
    if (a & (1 << bit))
    {
      ...
    }
    

    Ein int ist sizeof(int)*8 Bit lang

    wie man Zahlen einliest sollen dir die C-ler hier verraten, ich rühr das nicht an 🤡

    mit if(zahl % andereZahl == 0) prüfst du, ob eine Zahl durch eine andere teilbar ist

    das sollte soweit alles sein, dass du wissen musst 😉





  • Ja erwischt 🙂
    Hab ne andere Variante um von Dezimal auf binär umzurechnen. Mein Problem is aber, dass ich nicht weiss wie ich alle bytes mit | voneinander trennen soll. Habs mit ner for schleife probiert klappt aber milde gesagt nicht so ganz. Ich hoffe du kannst mir helfen...
    Jede 8. Stelle soll durch | getrennt sein.

    #include <stdio.h>
    int main()
    {
    unsigned int value,i,bin[32];
    printf("Please enter an integer:");
    scanf("%d",&value);
    int j;
    for(i=0;i<32;i++)
    {
    bin[i]=((value>>i)&1);
    }
    //Schleife für umgekehrte Ausgabe
    for(i=0;i<32;i++)
    {
    for (j=8;j<32;j++)
    {
    if ( j = (j+8))
    {
    printf ("|");
    }
    }
    printf("%d",bin[31-i]);
    }
    printf("\n");
    return 0;
    }



  • Benutze bitte in Zukunft cpp-Tags (links unter den Smileys), dann ist dein Code auch lesbar:

    #include <stdio.h>
    int main()
    {
    	unsigned int value,i,bin[32];
    	printf("Please enter an integer:");
    	scanf("%d",&value);
    	int j;
    	for(i=0;i<32;i++)
    	{
    		bin[i]=((value>>i)&1);
    	}
    	//Schleife für umgekehrte Ausgabe
    	for(i=0;i<32;i++)
    	{
    		for (j=8;j<32;j++)
    		{
    			if ( j = (j+8))
    			{
    				printf ("|");
    			}
    		}
    		printf("%d",bin[31-i]);
    	}
    	printf("\n");
    	return 0;
    }
    


  • Das hier

    for (j=8;j<32;j++)
            {
                if ( j = (j+8))
                {
                    printf ("|");
                }
            }
    

    nimmst du mal komplett raus (macht gar keinen Sinn, sorry 🙂 ), und packst dafür das hier

    if(i && !(i%8)) {
    			printf("|");
    		}
    

    über deine printf-Ausgabe. Sollte passen.



  • if ( j = (j+8))
    

    Meckert bei sowas dein Compiler nicht zumindest ein bischen?
    Du hast da nämlich keinen Vergleich (==), was es vermutlich sein sollte, sondern eine Zuweisung (=). Was grundsätzlich erlaubt ist, aber so gut wie nie erwünscht, da das Ergebnis (so gut wie?) immer TRUE ist.



  • Genmutant schrieb:

    if ( j = (j+8))
    

    Meckert bei sowas dein Compiler nicht zumindest ein bischen?
    Du hast da nämlich keinen Vergleich (==), was es vermutlich sein sollte, sondern eine Zuweisung (=). Was grundsätzlich erlaubt ist, aber so gut wie nie erwünscht, da das Ergebnis (so gut wie?) immer TRUE ist.

    Der Vergleich wäre doch genauso Quatsch. Der wäre logischerweise immer false. Ein Apfel ist nicht das Gleiche wie ein Apfel plus 8 Äpfel. Da müsste es schon ein richtig, richtig großer Apfel sein...



  • Meckert bei sowas dein Compiler nicht zumindest ein bischen?
    Du hast da nämlich keinen Vergleich (==), was es vermutlich sein sollte, sondern eine Zuweisung (=). Was grundsätzlich erlaubt ist, aber so gut wie nie erwünscht, da das Ergebnis (so gut wie?) immer TRUE ist.

    so gut wie?

    Naja, halt nur wenn nicht null. Nullwerte sind beim Programmieren gar nicht so selten.
    Haben die Zahlen bei dir nur 3 Bits?


Anmelden zum Antworten