www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Zwei Bits im Byte testen


Autor: Norbert von Xanten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hab schon viel gelernt hier im Forum. Aber jetzt hab ich ein neues
Problem.
In einem Byte muss ich mittels der if-Anweisung den Zustand der beiden
Bits 4 und 5 testen.

1.Fall: Das Ergebniss ist Wahr, wenn beide Bits 'L' sind,

2.Fall: Das Ergebniss ist Wahr, wenn beide Bits 'H' sind.

In Codevision habe ich folgendes versucht,
für 'H' Test:
if ((byte & (1<<4)) && (byte & (1<<5)))

Autor: Norbert von Xanten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mist, aus Versehen Return gedrückt...

für 'L' Test:
if (!(byte & (1<<4)) && !(byte & (1<<5)))


Beide Varianten arbeiten aber nicht so wie sie sollen.

Was mache ich da falsch?


Norbert

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du prüfst das 5. und 6. Bit

Unbekannter

Autor: Mathias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
if( !(BYTE & 30) )

Autor: Mathias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sry hab da grad was übersehen in deinen angaben:

if( !(BYTE & 0x30) || ((BYTE & 0x30) == 0x30) )
  =>WAHR

Autor: Norbert von Xanten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Mathias

ist das 30 oder 0x30?

Wäre auch 0b00110000 richtig?

Autor: Mathias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
0x30, 0b00110000  wäre natürlich auch richtig

aber wie gesagt dass müsste passen:

if( !(BYTE & 0x30) || ((BYTE & 0x30) == 0x30) )

Autor: Mathias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ach ja das ganze testet natürlich jetzt auf LOW oder High!!!

Autor: Quacks (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

@mathias
>  if (!(BYTE & 0x30))

für welches "Byte" wird der Ausdruck denn:false ?

er ist immer true!!

Gruß

Autor: Rahul Der trollige (rahul)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
if (((~Byte & 0x30)==0x30) || ((Byte & 0x30) == 0x30)) ...

kann sein, dass das noch verkürzt werden kann.

Autor: Mathias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
warum soll dass denn bitte immer true sein??

nimm mal fuer byte 0xAA: dann bekommst du 20 => wegen dem ! is das
ganze dann wohl false!!!

also:

if( !(BYTE & 0x30) || ((BYTE & 0x30) == 0x30) )



!(BYTE & 0x30): nur true wenn beide bits = 0
((BYTE & 0x30) == 0x30): nur true wenn beide bits = 1

mfg, Mathias

Autor: Daniel Braun (khani)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

auch schön ist :
if (!((BYTE & (1<<4)) ^^ (BYTE & (1<<5))))
{ bla; }

So fern man mit den bits eines bytes bei Null zu zählen beginnt. Mit
XOR kann man auch schöne Dinge machen.

MfG, Daniel.

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

dumm nur das es den ^^ Operator in C überhaupt nicht gibt.

Matthias

Autor: Rahul Der trollige (rahul)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
den ^ aber...

Autor: Quacks (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

@mathias

  1010 1010     0xAA
& 0011 0000     0x30
-----------
  0010 0000

! 0010 0000
-----------
  1101 1111  ->  das ist true, oder sehe ich das falsch?

Gruß

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

@Quaks
! ist etwas komplett anderes als ~

@Rahul
^ ist etwas komplett anderes als ^^

Matthias

Autor: Mathias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ quaks: wie matthias schon gesagt hat:

! ist etwas komplett anderes als ~  !!!!!

und meiner meinung nach passt der code ziehmlich sicher

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.