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


von Roger K. (roschee)


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
von ev so? (Gast)


Lesenswert?

bit und byteweiser vergleich?

von ... .. (docean) Benutzerseite


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

von ev so? (Gast)


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 */

von Klaus W. (mfgkw)


Lesenswert?

x und y sind binär geschrieben (das ist kein Standard-C, sondern 
gcc-Erweiterung, aber hier hilfreich:
1
x = dezimal 1 = binär 0b00000001
2
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:
1
x = dezimal 1 = binär 0b00000001
2
y = dezimal 2 = binär 0b00000010
3
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.

von Klaus W. (mfgkw)


Lesenswert?

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

von gast (Gast)


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

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.