Binärrechner Verständnisproblem



  • Hallo,

    Ich habe eine Frage zum folgenden Code eines Binärrechners und zwar konkret zu dieser Zeile:

    bin[i]=((wert >> i)&1);
    

    Wert ist ja eine Dezimalzahl und wenn diese um i-Stellen nach rechts verschoben wird? und was bedeutet hier das &1?

    Bitte um Eure Hilfe!

    int main()
    {
    	unsigned int wert, i, bin[8];
    	printf("Bitte geben Sie eine Dezimalzal von 0 bis 255 ein:");
    	scanf("%d",&wert);
    
    	for(i=0; i<8; i++)
    	{
    		bin[i]=((wert >> i)&1);
    	}
    
    	//Schleife für umgekehrte Ausgabe
    	for(i=0; i<8; i++)
    	{
    		printf("%d",bin[7-i]);
    	}
    	return 0;
    }
    


  • ledi schrieb:

    Wert ist ja eine Dezimalzahl und wenn diese um i-Stellen nach rechts verschoben wird?

    Nein. Geshiftet wird auf Bitebene.
    z.B.: 5 << 1 = 101b << 1 = 1010b = 10.

    ledi schrieb:

    und was bedeutet hier das &1?

    Das & ist ein binärer Operator. & 1 bedeutet, dass alle Stellen bis auf die erste (binär von Rechts) auf 0 gesetzt werden, die erste Stelle bleibt so wie sie ist.



  • OK!

    Angenommen ich gebe für Wert die Dezimalzahl 10 ein.
    Binär auf 8-Bit Ebene wäre das dann 0000 1010.

    Im 1. Schritt wäre dann:

    for(i=0; i<8; i++)
    {
         bin[i]=((wert >> i)&1); 
    }
    // bin[1] = 0000 0101     ...also alles um 1 nach rechts
    //     &1 = 0000 0001
    //          0000 0001     ... das Ergebnis im 1. Durchlauf
    

    Habe ich das so richtig verstanden?



  • Das ist der 2. Schritt, im 1. ist i=0 🙂



  • Probiere es aus, dann wirst du deine Schleife als verkehrt herum erkennen.


Log in to reply