Forum: PC-Programmierung C Anfängerfrage if (tmp & 0x01) {.


von mgolbs (Gast)


Lesenswert?

Hallo,

als C Anfänger habe ich eine Unsicherheit. Prüft
1
if (tmp & 0x01) {..

nur ob bit 0 den Zustand 1 in Variable tmp hat (egal was bit 1..bit7 
haben - davon bin ich bist jetzt ausgegangen), oder ob nur bit 0 im 
Zustand 1 ist und der Rest auch den Zustand 0 besitzt 
(Absolutvergleich)?

Gruß und Dank Markus

von Oliver S. (oliverso)


Lesenswert?

Das ist ein bitweises und. Schreib es dir auf, dann verstehst du, warum 
da nur Bit 0 einen Einfluß auf das Ergebnis haben kann.

Oliver

von leo (Gast)


Lesenswert?

mgolbs schrieb:
> if (tmp & 0x01) {..
>
> nur ob bit 0 den Zustand 1 in Variable tmp hat (egal was bit 1..bit7

Yep.
Zerleg das in die 2 Schritte:

1. boolsches AND
1
  tmp 0x01 -> b
2
   x0    1    0
3
   x1    1    1
2. if (b) ist falsch, wenn b 0 ist, sonst wahr

leo

von Dirk B. (dirkb2)


Lesenswert?

mgolbs schrieb:
> oder ob nur bit 0 im
> Zustand 1 ist und der Rest auch den Zustand 0 besitzt

Das wäre if (tmp == 1)

: Bearbeitet durch User
von foo (Gast)


Lesenswert?

1
if (tmp & 0x01) {

die Bedingung ist wahr, wenn tmp ungerade ist.

von Joachim B. (jar)


Lesenswert?

Dirk B. schrieb:
> Das wäre if (tmp == 1)

aber auch wenn tmp == 3 ist
aber auch wenn tmp == 5 ist usw.
aber auch wenn tmp == 33558883336644771 ist usw.

also gilt eher wohl:

foo schrieb:
> die Bedingung ist wahr, wenn tmp ungerade ist.

von Dirk B. (dirkb2)


Lesenswert?

Joachim B. schrieb:
> also gilt eher wohl:

Ich bezog mich auf den Teil der Frage (den ich auch zitiert hatte)

mgolbs schrieb:
> oder ob nur bit 0 im
> Zustand 1 ist und der Rest auch den Zustand 0 besitzt

Also Bit ist 1 und alle anderen Bits sind 0


Beim & 0x01 ist der Zustand der anderen Bits egal.

von Sebastian S. (amateur)


Lesenswert?

Die ganze Sache wäre, für den Anfänger, lesbarer, wenn da:
if ( ( tmp & 0x01 ) != 0 )
stände.

von MaWin (Gast)


Lesenswert?

Sebastian S. schrieb:
> Die ganze Sache wäre, für den Anfänger, lesbarer, wenn da:

if ( ( tmp & 0x01 ) == 0x01 )

stände.

von Lutz (Gast)


Lesenswert?

Na ja...
Wenn man das wissen will, wäre wohl
1
if (tmp == 0x01)
am lesbarsten.

von Dirk B. (dirkb2)


Lesenswert?

Lutz schrieb:
> Na ja...
> Wenn man das wissen will, wäre wohl
>
1
if (tmp == 0x01)
> am lesbarsten.

Das ist aber was ganz anderes als
1
 if ( ( tmp & 0x01 ) == 0x01 )

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.