Gast
#685893
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
|
Anzeige
|
wert &= (1<<nr);
Gast
#685893
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 Willst du das entsprechende Bit (In nr abgelegt) löschen? Dann so:
(Man beachte die Tilde -> unäres NOT)
Gast
#685903
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
Gast
#685907
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
Gast
#685909
Wenn ich das ganze in VisualC++ teste, funktioniert das Ganze wie zu erwarten Dann würde ich mal darauf tippen, dass deine Variablen nicht das enthalten, was du meinst. Wie überprüfst du das denn?
Gast
#685914
Gast
#685918
@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.
Gast
#685922
@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?
Gast
#685930
SOORRRYYYY Fehler von mir, denn Taster 1 liegt an Bitposition 0, d.h.
dann passt alles. trotzdem danke Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|