Veröffentlicht 30. März 200322 j 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
31. März 200322 j 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]
31. März 200322 j 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
31. März 200322 j 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.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.