Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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]

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

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.

Danke - sehr intelligente Loesung!!!

Gruss,

xound

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.