Logische Operatoren Verständnis

Gast #3495623
Lesenswert?

Hallo!
Wir haben bald Klausur und bin auf folgendes im Fragenkatalog 
aufgestoßen:
mask = ~(~0 << n)
mask = ~(~0 << m – n + 1) << n          //m >= n

Was für ein Spaß passiert da?
beim ersten sowas oder: ~(255 << n) und das nochmal negiert ist dann 
was? 255 >> n ->ein Rechtsshiften?

und das Zweite ist mir zu hoch

kann mir da wer helfen?
Is anybody out there?

mfg
mpt
Moderator #3495682
Lesenswert?

Spiel das Ganze einfach anhand einiger Beispiele auf (Karo-)Papier
durch. Du wirst dann schnell erkennen, wohin der Hase läuft. Dann
versuchst du, in einem einfachen Satz zu formulieren, welche Bits im
Ergebnis gesetzt sind (abhängig von n und m).

~0 ist übrigens nicht 255, sondern besteht aus sovielen Einsen wie der
int-Datentyp Bits umfasst (i.Allg. 16 oder 32).
Gast #3495846
Lesenswert?

Tipp schrieb:
> Verstehen geht mit dem Debugger

In dem Fall nicht.

Verstehen geht mit einem C-Buch. Darin die Kapitel "Operatoren" (was 
machen die komischen Zeichen da überhaupt?) und "Operator precedence" 
bzw. "Priorität" 8wenn da mehrere Operatoren in einer Anweisung stehen, 
in welcher Reihenfolge werden die ausgeführt?).

Und das dann, wie Yalu schon schrieb, zu Fuß auf einem Blatt Papier 
lösen. Schritt für Schritt.

Oliver
#3498044
Lesenswert?

Nach dem Studium des K&R verinnerlichen, dass es einen grundlegenden 
Unterschied zwischen 'logischen Operatoren' und 'binären (oder 
bitweisen) Operatoren' gibt.
In manchen Fällen (zb & und &&) sind sie Schreibweisen sehr ähnlich, so 
dass man sie beim schnellen Drüberlesen schon mal verwechseln kann, wenn 
man diesen grundlegenden Unterschied nicht verinnerlicht hat.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren