Forum: Mikrocontroller und Digitale Elektronik Logikproblem :-(


von H.Joachim S. (crazyhorse)


Lesenswert?

Ich schäme mich ja fast - aber finde keine ordentliche Lösung.
(mit ner Menge Ifs gehts natürlich)
2 Variablen, die eine enthält die Maske, die andere aktuellen Daten.
Ausgang soll nur dann 1 sein, wenn alle Bits, die in der Maske 1 stehen 
haben auch 1 sind. Steht in der Maske 0, spielt das Datenbit keine 
Rolle.

11001100
11xx11xx  -> 1

11001100
01xx11xx  -> 0

10000000
0xxxxxxx  -> 0

Ideen?

von Globi (Gast)


Lesenswert?

Einfach...

pseudo:
if ((maske & daten) == maske) ausgang=1; else ausgang=0;

von Peter D. (peda)


Lesenswert?

1
if( ~val & mask )
2
  val = 0;
3
else
4
  val = 1;

Peter

von Daniel (Gast)


Lesenswert?

Ich würde die Maske und die Daten UND Verknüpfen und das Ergebnis dann 
mit der Maske vergleichen. if((M & D) == M) so ungefähr

Gruß Daniel

von Daniel (Gast)


Lesenswert?

oh Zu spät :-)

von H.Joachim S. (crazyhorse)


Lesenswert?

Vor den Kopf klatsch - Danke :-)

von Karl H. (kbuchegg)


Lesenswert?

Und als 3.te Lösung
1
  if( ~( val & mask ) )
2
    val = 0;
3
  else
4
    val = 1;

von Peter D. (peda)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Und als 3.te Lösung
>
>
1
>   if( ~( val & mask ) )
2
>     val = 0;
3
>   else
4
>     val = 1;
5
>

Nö.

Peter

von H.Joachim S. (crazyhorse)


Lesenswert?

Ich wusste, dass es einfach ist - manchmal steht man sich selbst im Weg 
:-)

von Karl H. (kbuchegg)


Lesenswert?

Peter Dannegger schrieb:
> Karl Heinz Buchegger schrieb:
>> Und als 3.te Lösung
>>
>>
1
>>   if( ~( val & mask ) )
2
>>     val = 0;
3
>>   else
4
>>     val = 1;
5
>>
>
> Nö.
>
> Peter


Ach Mist. Ich hab nur auf die 1 Bits geschaut und nicht bedacht, dass ja 
auch die 0-Bit umgedreht werden.

von asdasd (Gast)


Lesenswert?

Oder etwas weniger leicht zu lesen aber kompakter:

  val = (~val & mask) ? 0 : 1;

von Peter D. (peda)


Lesenswert?

Geht noch kürzer:
1
val = !(~val & mask);


Peter

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.