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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von mgolbs (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

als C Anfänger habe ich eine Unsicherheit. Prüft
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)


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


Bewertung
0 lesenswert
nicht 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
  tmp 0x01 -> b
   x0    1    0
   x1    1    1
2. if (b) ist falsch, wenn b 0 ist, sonst wahr

leo

von Dirk B. (dirkb2)


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


Bewertung
1 lesenswert
nicht lesenswert
if (tmp & 0x01) {

die Bedingung ist wahr, wenn tmp ungerade ist.

von Joachim B. (jar)


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


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


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

von MaWin (Gast)


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


Bewertung
-3 lesenswert
nicht lesenswert
Na ja...
Wenn man das wissen will, wäre wohl
if (tmp == 0x01)
am lesbarsten.

von Dirk B. (dirkb2)


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

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

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.

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