Zum Inhalt springen

wie versteht ihr diese aufgaben?


Empfohlene Beiträge

Geschrieben

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

Geschrieben
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]

Geschrieben

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

Geschrieben

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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...