Hallo! Eine kurze Frage... Situation: Port D Pin 1 = 0 Port C Pin 1 = 1 Variante 1: if( ( PINC & (1<<PINC1) ) & ~( PIND & (1<<PIND1) ) ) Variante 2: if( ( PINC & (1<<PINC1) ) & !( PIND & (1<<PIND1) ) ) Warum funktioniert Variante 1, aber Variante 2 nicht? Die beiden Operatoren bewirken doch das selbe oder nicht? Vielen Dank, ben
Nein, sie bewirken nicht dasselbe. ! ist ein logisches NOT ~ ist eine bitweise Invertierung
Und warum genau funktioniert Variante 2 im obigen Beispiel nicht? ( PIND & (1<<PIND1) ) dürfte FALSE sein, da das bit nicht gesetzt ist...mit dem ! bzw NOT davor müsste es doch wieder 1 sein?
Servus, ist nicht ganz dasselbe: als Typ mal unsigned char vorausgesetzt ergibt sich: ~(PIND & (1<<PIND1) => ~(0 & (1<<0)) => ~(0 & 1) => ~0 => 255 !(PIND & (1<<PIND1) => !(0 & (1<<0)) => !(0&1) => !1 => 0 Gruss, rweber
Moin, Zwischen den geklammerten Ausdrücken würde wohl && statt & sinnvoller sein ... sonst ist if( ( PINC & (1<<PINC1) ) & !( PIND & (1<<PIND1) ) ) immer false if( ( PINC & (1<<PINC1) ) && !( PIND & (1<<PIND1) ) ) führt ein logisches UND aus Gruß Daniel
daaaaanke danke danke! sehr schön! das war also das problem...^^ da fällt mir grad noch ne frage ein... aber die gehört hier net rein...also neuen thread machen... cu, ben
> da fällt mir grad noch ne frage ein... > aber die gehört hier net rein...also neuen thread machen... Ich glaub es wär besser wenn du dich mit den Grundlgaen von C vertraut machst als mit eröffnen von Threads
teilweise rennen hier leute rum...dat gibet nich o.O frage: wozu ist dieses forum da? damit gewisse leute meckern können wenn man es benutzt???? Bin eigentlich kein C Anfänger sondern programmiere schon jahre in C++ und mehreren anderen Sprachen. Mit den Bit-Operatoren und der Controller-Programmierung hatte ich bisher leider noch nicht sonderlich viel zu tun. Wenn ich hier im Forum eine Frage stelle, dann hab ich da mindestens schon mehrere Seiten zu durchgelesen und probiere nebenbei hier am Testboard rum. Aber wenn du dich dann besser fühlst... Die Frage von der ich oben geredet habe, habe ich inzwischen selbst beantwortet. MfG, Ben
Glaub ich auch... Wenn du nach Jahren in C++ wegen ~ bzw. ! hier nachfragst... Mit F1 in deiner IDE bzw. in Deinem Handbuch oder Google & Co. hättest du wohl die Information schneller Gefunden. Ja für was ist das Forum da? Nach meiner Ansciht eher um Richtige Problem zu lösen!
Für welches Software Projekt interessiert mich ne Bit Invertierung? ~ und ! sind was unterschiedliches... Was ich wissen wollte war bloß, wieso die eine Variante nicht funktioniert... Zur Lösung meines Problems hätten beide funktionieren müssen... Warum hat es nicht gefunkt? => Weil ich was anderes übersehen hatte... Wenn ich ne 0 hab und sonst nix ist das Komplement nicht mehr 0 => true Wenn ich ne 0 hab ist !0 => 1 => true Das meinte ich mit das selbe... Da es nicht funktioniert hat dachte ich der Fehler müsse was damit zu tun haben...hatte aber das & und das && übersehen... Was in jedem Buch darüber steht weiß ich...daraus ging nur hervor was ich schon wusste...dass zum negieren beides benutzbar sein muss... Wozu solche unnötigen kommentare zu hinterlassen... Zuerst heißt es das forum soll für "richtige probleme" benutzt werden und dann wird der startschuss zum off topic gegeben...
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.