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:
1 | wert &= ~(1 << nr) |
(Man beachte die Tilde -> unäres NOT)
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
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
Dann würde ich mal darauf tippen, dass deine Variablen nicht das enthalten, was du meinst. Wie überprüfst du das denn?
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 | }
|
@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.
@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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.