www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Logische Operatoren ~ und !


Autor: ben (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, sie bewirken nicht dasselbe.
! ist ein logisches NOT
~ ist eine bitweise Invertierung

Autor: ben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Robert Weber (rweber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Felix Bonjour (e-b)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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

Autor: ben (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Conrad (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: ben (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry Ben, aber das sind Basics, die muß man einfach draufhaben.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.