Eingänge mit Binärcode

Gast #2439231
Lesenswert?
• ▲
▼
Im Prinzip ja.

Wenn es der z.B. GCC ist, denn der kennt Binärschreibweise.

Und wenn du mit 0b00001100 den Teil (1<<PINB2) | (1<<PINB3) ersetzen 
willst, nicht den Teil mit dem PINB &...

Und wenn du bei jeder Fragen in der du solchen Code benutzt Hinweise 
brauchst, dass diese Schreibweise aus mehreren leicht einsichtigen 
Gründen ungünstig ist.
Gast #2439232
Lesenswert?
• ▲
▼
>ist es möglich, dass ich statt (PINB & (1<<PINB2) | (1<<PINB3));
>es auch als binärcode schreiben kann.? halt 0b00001100

Wenn der Compiler nicht meckert geht das.
Ich würde das aber so schreiben:

(PINB & ((1<<PINB2) | (1<<PINB3)));
Gast #2439271
Lesenswert?
• ▲
▼
Ups!!!
Aufpassen mit den Klammern und dem C-Operatoren Vorrang oder besser 
klammern.
http://www.tu-chemnitz.de/urz/kurse/unterlagen/C/kap2/vorrang.htm

>> (PINB & (1<<PINB2) | (1<<PINB3));
Daraus macht der Compiler intern:
Bitmanipulation

PINB einlesen
Eingelesenes mit (1<<PINB2) bitweise verUNDen
Ergebnis mit (1<<PINB3) verODERn

Bsp. #1:
PINB                    = 0b00001100
PINB & (1<<PINB2)       = 0b00000100
0b00000100 | (1<<PINB3) = 0b00001100

Bsp. #2:
PINB                    = 0b00000100
PINB & (1<<PINB2)       = 0b00000100
0b00000100 | (1<<PINB3) = 0b00001100

Bsp. #3
PINB                    = 0b00000100
PINB & 0b00001100       = 0b00000100  <= vgl. Bsp. #2:

Das im Prinzip ja in meinem Beitrag oben kannst du streichen.
Gast #2439293
Lesenswert?
• ▲
▼
> ich würde fast denken, wenn man diese if Anweisung mit binärcode
> schreibt, geht es schneller

Tut es nicht, weil der Compiler den Teilausdruck den du ersetzen willst 
und die Rechenregeln beim Kompilieren schon ausrechnet. Beide Varianten 
- die mit symbolischen Namen und die mit Binärzahl (bei korrekter 
Klammerung...) - haben die gleiche Ausführungszeit. Die Variante mit 
symbolischen Namen ist aber besser lesbar und besser wartbar.
#2439414
Lesenswert?
• ▲
▼
Johannes Adler schrieb:
> Krapao schrieb:
>> geht es schneller
>
> damit meinte ich, den code schneller schreiben können. nur für mich

Schneller schreiben ist nie ein Argument.

Du schreibst den Code einmal und machst vielleicht noch ein paar 
Änderungen. Aber: Du liest ihn viele male, bis das Programm fertig ist. 
Code wird so geschrieben, dass man ihn gut lesen kann und nicht dass man 
beim Schreiben ein paar Tastendrücke einspart.
Gast #2439426
Lesenswert?
• ▲
▼
Hi

>damit meinte ich, den code schneller schreiben können. nur für mich

Dann solltest du das Hexadezimalsystem bevorzugen. dann wird aus
1<<PINB2) | (1<<PINB3 -> 0x0C. Kürzer und unverständlicher geht es dann 
wirklich nicht.

MfG Spess
Gast #2439439
Lesenswert?
• ▲
▼
Johannes Adler schrieb:
> if (PINB & (0b00001100);
>
> wenn pb2 und 3 auf high sind, dass ich dann ein eingang habe

Eine Grundregel ist, dass es genauso viele öffnende wie schließende 
Klammern geben muß. Aber das wird dir dein Compiler dann auch sagen.

Das PinB hat mit der Umschaltung zwischen Eingang und Ausgang überhaupt 
gar nichts zu tun. Dafür gibt's das DDRB - steht aber alles im 
Datenblatt von Atmel.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.