Logische Operatoren ~ und !

Gast #1138227
Lesenswert?
• ▲
▼
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
Gast #1138287
Lesenswert?
• ▲
▼
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
Gast #1138488
Lesenswert?
• ▲
▼
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
Gast #1138514
Lesenswert?
• ▲
▼
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!
Gast #1138525
Lesenswert?
• ▲
▼
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...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren