Forum: Compiler & IDEs Bitoperationen, welche Ergebnisse?


von Maxim (Gast)


Lesenswert?

Ich verstehe nicht ganz, welches Ergebnis z.B. das hier liefert:
1
BYTE a = 0b00010001;
2
BYTE b = 0b10000000;
3
4
return a||b

und welches Ergebnis würde eine Und-Verknüpfung liefern und warum?
Das steht leider nicht so ausführlich in der Artikelsammlung.

Muss jedes der acht Verknüpfungen eines Bytes true liefern oder reicht 
nur ein true aus? Es fehlt die Logik dahinter.

von Philipp B. (philipp_burch)


Lesenswert?

Dein Code wird true (Logischer Wert "true", das ist meistens irgendein 
Wert ungleich 0) liefern, da sowohl a als auch b true (ungleich 0) sind. 
Bei a && b wäre das Ergebnis ebenfalls true, da eben BEIDE true sind 
(Bei || reicht eines). || und && sind aber logische Operationen, keine 
binären. a | b ergäbe dann 0b10010001 und a & b eben 0.

von Johannes M. (johnny-m)


Lesenswert?

Maxim wrote:
> Ich verstehe nicht ganz, welches Ergebnis z.B. das hier liefert:
>

BYTE a = 0b00010001;
BYTE b = 0b10000000;

return a||b

Das gibt "1" als Ergebnis.

> und welches Ergebnis würde eine Und-Verknüpfung liefern und warum?
> Das steht leider nicht so ausführlich in der Artikelsammlung.
Die "&&"-Verknüpfung liefert in diesem Fall auch eine "1" als Ergebnis.

> Muss jedes der acht Verknüpfungen eines Bytes true liefern oder reicht
> nur ein true aus?
Die Operatoren "&&" und "||" sind die logischen Operatoren. Sie
überprüfen, ob die Werte links und rechts von ihnen "wahr" oder "falsch"
sind und führen mit diesen Wahrheitswerten die entsprechenden
Verknüpfungen durch. "wahr" ist dabei ALLES, was nicht "0" ist!

Da im obigen Beispiel beide Operanden ungleich Null sind, liefern beide
Operanden ein "wahr", also eine "1" zurück.

Mit den bitweisen Operatoren "&" und "|" ist das anders. Dabei werden
die Operanden Bit für Bit miteinander verknüpft. Mit den obigen Werten
wäre
a | b == 10010001b
a & b == 00000000b

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Philipp Burch wrote:

> Dein Code wird true (Logischer Wert "true", das ist meistens irgendein
> Wert ungleich 0) liefern, ...

Für jeden C-Compiler ist das der Wert 1.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.