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

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