xound Geschrieben 30. März 2003 Geschrieben 30. März 2003 Hi, wie interpretiert Ihr die folgenden beiden Aufgaben? 1) Zeigen Sie wie vier positive Ganzzahlen, kleiner als 16, in einer Int-Variable gespeichert werden können. Benutzen Sie dafür Bitoperationen und das "For-Statement". Schreiben Sie dafür ein Programm, in dem ein Test eingebaut ist. 2) Lesen Sie eine Ganzzahl ein. In der internen binären Repräsentation steht Bit 0 ganz rechts, daneben Bit 1, u.s.w. Wechseln Sie: Bit 0 mit Bit 7 Bit 1 mit Bit 6 Bit 2 mit Bit 5 Bit 3 mit Bit 4 Geben Sie das Ergebnis aus. Benutzen Sie eine hexadezimale Ein- und Ausgabe und das "While-Statement". Habt Ihr vielleicht einen Loesungansatz jeder Aufgabe fuer mich? Dank & Gruss, xound Zitieren
maxim_42 Geschrieben 31. März 2003 Geschrieben 31. März 2003 Alles ungetestet... //1. unsigned anzBitsProZahl= sizeof(int)/4; unsigned ergebnis=0; unsigned z; for(int i=3; i>-1; --i){ Zahl z einlesen; ergebnis += z << ( i * anzBitsProZahl ); } //ergebnis ausgeben //2. unsigned ergebnis= 0; int i= 0; unsigned z; //z einlesen; while ( i < 4) { ergebnis += (z & ( 1<< (7-i) )) ? (1 << i) : 0; // alles klar? /* Beispielsweise für den ersten Schleifendurchgang: Wenn das 8. Bit der eingelesenen Zahl gesetzt ist, wird in ergebnis das erste Bit gesetzt. */ ergebnis += (z & ( 1<<i)) ? (1<<(7-i)) : 0; ++i; } //Ausgabe ergebnis [/PHP] Zitieren
xound Geschrieben 31. März 2003 Autor Geschrieben 31. März 2003 Hi, erstmal danke fuer Deine Muehe. Allerdings verstehe ich deinen Code zur zweiten Aufgabe nicht wirklich. <ergebnis += (z & ( 1<< (7-i) )) ? (1 << i) : 0; Kannst Du diese Berechung mal genau aufschluesseln? Danke & Gruss, xound Zitieren
maxim_42 Geschrieben 31. März 2003 Geschrieben 31. März 2003 Ja, das ist es was C für Schreibfaule so attraktiv macht. Alledings wird das Ganze schnell "unleserlich" wie in diesem Fall ergebnis += (z & ( 1<< (7-i) )) ? (1 << i) : 0 & ist der AND-Operator (binär) Beispiel 5 & 1 evaluiert zu 1 binäre Darstellung: 101 & 001 _____ 1 Der Operator << verschiebt das was links von ihm steht, X mal nach links. Wobei X der Wert ist der rechts vom Operator steht. Die hinzugekommenen Stellen werden 0 gesetzt. Beispiel 2 << 3 evaluiert zu 16 binäre Darstellung: 10 << 3 = 10000 Der ?: Operator: Könnte man am ehesten mit : "Wenn .. dann .. ansonsten .." übersetzen. Beispiel: A= (B> C)? 1 : 0 Wenn (B> C) true ist, dann ist A =1. Ansonsten ist A=0 Sehen wir uns nochmals den Ausdruck ergebnis += (z & ( 1<< (7-i) )) ? (1 << i) : 0 an. Für den Fall i= 0 evaluiert 1<<(7-i) zu binär 10000000 ( 1 sieben mal nach links verschieben) Der Ausdruck z & ( 1<< (7-i) ) ist dann != 0 ( und damit true) wenn in z das 8. bit gesetzt (1) ist. Wenn (z & ( 1<< (7-i) )) != 0 dann wird zu ergebnis (1 << i) hinzugezählt. Ansonsten 0. Zitieren
xound Geschrieben 31. März 2003 Autor Geschrieben 31. März 2003 Danke - sehr intelligente Loesung!!! Gruss, xound Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.