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
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]
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
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.
xound Geschrieben 31. März 2003 Autor Geschrieben 31. März 2003 Danke - sehr intelligente Loesung!!! Gruss, xound
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden