Forum: Mikrocontroller und Digitale Elektronik wert &= (1<<nr);


von Daniel (Gast)


Lesenswert?

Hallo,
ich programmiere mit Codevision und habe folgendes Problem

wert &= (1<<nr);

Bei wert=1 und nr=0 bekomme ich als Ergebnis 0 wobei es ja 1 sein 
müsste.

Was mach ich falsch

von Philipp B. (philipp_burch)


Lesenswert?

Willst du das entsprechende Bit (In nr abgelegt) löschen?
Dann so:
1
wert &= ~(1 << nr)
 (Man beachte die Tilde -> unäres NOT)

von Daniel (Gast)


Lesenswert?

nein ich möchte eine Bestimmte Taster abfragen und das ganze in eine 
if-Bedingung stellen.
10 Schalter sind am µC angeschlossen(über 2 Ports) und im normalzustand 
alle geschlossen(nach Masse -> also alle 0)

if(wert&(1<<nr)...; //Taste gedrückt
else... //Taste nicht gedrückt

von Ampfing (Gast)


Lesenswert?

Hi Daniel,

wieso sollte 0 & 1 gleich 1 sein?
wert = 0 heißt ja wert = 0b00000000 (jetzt mal von 8 bit ausgehend)
nr = 1 heißt (1 << nr) = 0b00000001

Das & macht jetzt eine binäre Verundung Deiner Variablen. Deswegen steht 
dann in wert aber nach wie vor eine 0. Wenn Du das letzte Bit setzten 
willst musst Du verodern (mit |=) nicht verunden.

Viele Grüße

von Daniel (Gast)


Lesenswert?

Wenn ich das ganze in VisualC++ teste, funktioniert das Ganze wie zu 
erwarten

von Philipp B. (philipp_burch)


Lesenswert?

Dann würde ich mal darauf tippen, dass deine Variablen nicht das 
enthalten, was du meinst. Wie überprüfst du das denn?

von Daniel (Gast)


Lesenswert?

1
#include <iostream.h>
2
3
int wert;
4
5
void main (void)
6
{
7
  wert=1;
8
  if(wert & (1<<0))cout<<"richtisch";
9
  else cout<<"falsch";
10
}

von yalu (Gast)


Lesenswert?

@Ampfing:

> wert = 0 heißt ja wert = 0b00000000 (jetzt mal von 8 bit ausgehend)
> nr = 1 heißt (1 << nr) = 0b00000001

Liest du hier:

> Bei wert=1 und nr=0 bekomme ich ...

;-)

Wahrscheinlich ist es so, wie Philipp geschrieben hat. Wenn nicht (was
aber unwahrscheinlicher ist), hat der Compiler einen Bug.

von yalu (Gast)


Lesenswert?

@Ampfing:

> wert = 0 heißt ja wert = 0b00000000 (jetzt mal von 8 bit ausgehend)
> nr = 1 heißt (1 << nr) = 0b00000001

Liest du hier:

> Bei wert=1 und nr=0 bekomme ich ...

;-)

@Daniel:

Und? Was liefert dein neues Testprogramm?

von Daniel (Gast)


Lesenswert?

SOORRRYYYY

Fehler von mir, denn Taster 1 liegt an Bitposition 0, d.h.
1
if( wert & ( 1<<(nr-1) ) )...
dann passt alles.
trotzdem danke

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.