mikrocontroller.net

Forum: PC-Programmierung Frage zu Programmieren in C von Kernighan


Autor: Roger Koller (roschee)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe gerade das Buch Programmieren in C. zweite Ausgabe. Dabei 
verstehe ich einen Zusammenhang nicht.

Auf Seite 48 Mitte steht beschrieben zum Thema Bit Manipulation.

Hat beispielsweise x den Wert 1 und y den Wert 2,
dann ist x & y gleich Null
aber x && y ist Eins.


Das verstehe ich nicht.

: Verschoben durch Admin
Autor: ev so? (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bit und byteweiser vergleich?

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
der & Operator führt die Bit Operation für jedes Bit einzeln durch:
Also Bit0(1.Wert) UND Bit0(2. Wert)
Bit1(1.Wert) UND Bit10(2. Wert)
Bit2(1.Wert) UND Bit2(2. Wert)
...

Der && Operator prüft zuerst mal ob beide Werte jeweils wahr sind (alles 
ungleich 0 ist wahr)
Und dann verknüpft der diese beide wahr oder falsch Werte mit einem UND

Autor: ev so? (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
unsigned int a = 60;  /* 60 = 0011 1100 */
    unsigned int b = 13;  /* 13 = 0000 1101 */
    unsigned int c = 0;

    c = a & b;                  /* 12 = 0000 1100 */

c = a && b; /* c = 0 */

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
x und y sind binär geschrieben (das ist kein Standard-C, sondern 
gcc-Erweiterung, aber hier hilfreich:
x = dezimal 1 = binär 0b00000001
y = dezimal 2 = binär 0b00000010

Mit & wird binär ver-UND-et.
Das ergibt im Ergebnis immer dort eine eins, wo an
entsprechender Stelle in beiden Ioeranden (x und y) eine
1 steht.
Das ist hier an keiner Stelle der Fall, also:
x = dezimal 1 = binär 0b00000001
y = dezimal 2 = binär 0b00000010
x&y           = binär 0b00000000

Mit einem && wird dagegen geprüft, ob beide Operanden ungleich 0 sind.
Falls ja, ist das Ergebnis 1, sonst 0.
Hier sind beide ungleich 0, also ist das Ergebnsi 1.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ev so:
wieso ist bei dir zum Schluß c 0? ich würde auf 1 tippen...

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bit verknüpfung
  0001
& 0010
------
  0000

logische verknüpfung
1 && 2 = 1, da keiner der Werte 0 ist
1 && 0 = 0, da einer der Werte 0 ist

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.