hallo... ist es möglich, dass ich statt (PINB & (1<<PINB2) | (1<<PINB3)); es auch als binärcode schreiben kann.? halt 0b00001100 danke..
abgesehen davon, daß in 0b00001100 das PINB nicht enthalten ist, deine zwei Ausdrücke also nicht gleichwertig sind: ja, es geht. Daß es meistens Unsinn ist, erwähne ich jetzt nicht.
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.
>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)));
Hi >ist es möglich, dass ich statt (PINB & (1<<PINB2) | (1<<PINB3)); >es auch als binärcode schreiben kann.? halt 0b00001100 Ja. Aber warum etwas lesbares durch Keilschrift ersetzen? MfG Spess
und wie kann man das dann schreiben.? if (PINB & (0b00001100); so oder wie
spess53 schrieb: > Ja. Aber warum etwas lesbares durch Keilschrift ersetzen? um Grundkenntnisse aufzubessern ;)
Klaus Wachtler schrieb: > kommt drauf an, was du erreichen willst. if (PINB & (0b00001100); wenn pb2 und 3 auf high sind, dass ich dann ein eingang habe
Johannes Adler schrieb: > um Grundkenntnisse aufzubessern ;) Die wichtigste Grundkenntnis: erst muß man selbst wissen, was man will. Die zweite: wenn man andere fragt, kann man wenigstens klar sagen, was man vorhat. Dann müssen nicht alle rumraten, das hilft eh nix.
Johannes Adler schrieb: > Klaus Wachtler schrieb: >> kommt drauf an, was du erreichen willst. > > if (PINB & (0b00001100); > > wenn pb2 und 3 auf high sind, dass ich dann ein eingang habe egal, wie die anderen Pins stehen? Oder müssen die 0 sein? Sind überhaupt alle Pins von B Eingang?
ich möchte ein codier schalter programmieren... je nach dem wie er steht sind bestimmte pins frei... ich würde fast denken, wenn man diese if Anweisung mit binärcode schreibt, geht es schneller
Klaus Wachtler schrieb: > egal, wie die anderen Pins stehen? Oder müssen die 0 sein? > Sind überhaupt alle Pins von B Eingang? naja...die sind dann automatisch auf null insgesamt sind es fünf eingänge und ob die alle auf port b c oder d sind, ist egal...auf jeden fall alle auf einen
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.
> 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.
Krapao schrieb: > geht es schneller damit meinte ich, den code schneller schreiben können. nur für mich
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.
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
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.
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.