www.mikrocontroller.net

Forum: Compiler & IDEs Bitoperationen, welche Ergebnisse?


Autor: Maxim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verstehe nicht ganz, welches Ergebnis z.B. das hier liefert:
BYTE a = 0b00010001;
BYTE b = 0b10000000;

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.

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.