Forum: Mikrocontroller und Digitale Elektronik Zwei Bits im Byte testen


von Norbert von Xanten (Gast)


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)))

von Norbert von Xanten (Gast)


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

von Unbekannter (Gast)


Lesenswert?

Du prüfst das 5. und 6. Bit

Unbekannter

von Mathias (Gast)


Lesenswert?

if( !(BYTE & 30) )

von Mathias (Gast)


Lesenswert?

sry hab da grad was übersehen in deinen angaben:

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

von Norbert von Xanten (Gast)


Lesenswert?

@Mathias

ist das 30 oder 0x30?

Wäre auch 0b00110000 richtig?

von Mathias (Gast)


Lesenswert?

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

aber wie gesagt dass müsste passen:

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

von Mathias (Gast)


Lesenswert?

ach ja das ganze testet natürlich jetzt auf LOW oder High!!!

von Quacks (Gast)


Lesenswert?

Hallo,

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

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

er ist immer true!!

Gruß

von Rahul D. (rahul)


Lesenswert?

if (((~Byte & 0x30)==0x30) || ((Byte & 0x30) == 0x30)) ...

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

von Mathias (Gast)


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

von Daniel B. (khani)


Lesenswert?

Hallo,

auch schön ist :
1
if (!((BYTE & (1<<4)) ^^ (BYTE & (1<<5))))
2
{ 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.

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

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

Matthias

von Rahul D. (rahul)


Lesenswert?

den ^ aber...

von Quacks (Gast)


Lesenswert?

Hallo,

@mathias

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

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

Gruß

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

@Quaks
! ist etwas komplett anderes als ~

@Rahul
^ ist etwas komplett anderes als ^^

Matthias

von Mathias (Gast)


Lesenswert?

@ quaks: wie matthias schon gesagt hat:

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

und meiner meinung nach passt der code ziehmlich sicher

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.