Forum: Mikrocontroller und Digitale Elektronik Bitmathe, Bitshifting, Rechnen mit Bitshift usw. mit C.


von Zweier (Gast)


Lesenswert?

Hallo

ich möchte verstehen wie in C bzw. der Arduino IDE auf Bitebene 
manipuliert und gerechnet wird.
Während das setzen, löschen, toggeln einzelner Bits einfach ist und an 
sehr vielen Stellen auch gut nachvollziehbar erklärt oder sogar als 
Video gezeigt wird, habe ich jetzt noch kein gutes deutschsprachige 
Tutorial gefunden was die mittels  Bitshifting mögliche 
Rechenmöglichkeiten und Vorteile erklärt.

Mein Interessenbereich liegt hauptsächlich in der Praktischen Anwendung 
von 8 Bit µC (AVR) und der Sprache C bzw. der Arduino IDE.
http://playground.arduino.cc/Code/BitMath ist eigentlich schon ein guter 
Einstieg - aber eben in englisch was bei diesen Thema einen Anfänger die 
Sache leider erschwert.
Optimal wäre ein deutschsprachiges Videotutorial mit vielen 
Praxisbeispielen.

Wie geschrieben: Ich suche kein Mathematiktutorial über Boolsche Algebra 
oder Bitmanipulation in allgemeinen sondern ein Praxistutorial was sich 
schwerpunktmäßig auf C (Arduino IDE) und 8 Bit µC (AVR) bezieht.

Zweier

von Stefan S. (sschultewolter)


Lesenswert?


von M. K. (sylaina)


Lesenswert?

Zweier schrieb:
> habe ich jetzt noch kein gutes deutschsprachige
> Tutorial gefunden was die mittels  Bitshifting mögliche
> Rechenmöglichkeiten und Vorteile erklärt.

Überlege dir einmal, was du machst wenn du eine Zahl mit dem Faktor 10 
multiplizierst bzw. mit dem Faktor 10 dividierst. Das selbe ist Bitshift 
nur dass es im Computer idR zur Basis 2 ist und nicht zur Basis 10.

Warum muss es eigentlich genau die Arduino IDE sein? Kein Interesse auf 
C zu wechseln? Damit könntest du den Mikrocontroller vollständig nutzen 
wie es dir beliebt…natürlich in den Grenzen die das Datenblatt einem 
sagt. Die Arduino IDE schränkt da noch etwas mehr ein afaik.

von Ulrich F. (Gast)


Lesenswert?

Michael K. schrieb:
> Die Arduino IDE schränkt da noch etwas mehr ein afaik.
Das ist mir neu!
Es wird die AVR Toolchain verwendet.
so, oder so....
Die ganzen Arduino Libs kann man nutzen, muss man aber nicht.

von Peter (Gast)


Lesenswert?

Michael K. schrieb:
> Kein Interesse auf
> C zu wechseln?

C ist die Standardsprache beim Arduino.

von Rolf M. (rmagnus)


Lesenswert?

Peter schrieb:
> Michael K. schrieb:
>> Kein Interesse auf
>> C zu wechseln?
>
> C ist die Standardsprache beim Arduino.

Ich dachte es sei C++ in Kombination mit einigen sehr schwergewichtigen 
Bibliotheken.

von Johnny B. (johnnyb)


Lesenswert?

Wahrscheinlich werde ich jetzt für diese Aussage gesteinigt, aber ich 
sags trotzdem:
C nimmt man, damit man sich eben nicht mehr um so "Low-Level-Zeug" wie 
Rechnen per Bitmanipulationen kümmern muss. Man schreibt es dann im Code 
einfach so hin wie man es haben möchte z.B. "a = b * 4" und überlässt 
das Optimieren dem Compiler (in der Hoffnung, er möge dann selber die 
Multiplikation mit 4 durch eine entsprechende Shiftoperation ersetzen).

Der Vorteil liegt darin, dass der Code portabel wird und eher die Chance 
besteht, dass er auch auf einer anderen Plattform läuft, ohne dass man 
alles nochmals neu programmieren muss.

: Bearbeitet durch User
von Cyblord -. (cyblord)


Lesenswert?

Johnny B. schrieb:
> Wahrscheinlich werde ich jetzt für diese Aussage gesteinigt, aber ich
> sags trotzdem:
> C nimmt man, damit man sich eben nicht mehr um so "Low-Level-Zeug" wie
> Rechnen per Bitmanipulationen kümmern muss. Man schreibt es dann im Code
> einfach so hin wie man es haben möchte z.B. "a = b * 4" und überlässt
> das Optimieren dem Compiler (in der Hoffnung, er möge dann selber die
> Multiplikation mit 4 durch eine entsprechende Shiftoperation ersetzen).
>
> Der Vorteil liegt darin, dass der Code portabel wird und eher die Chance
> besteht, dass er auch auf einer anderen Plattform läuft, ohne dass man
> alles nochmals neu programmieren muss.

Totaler Humbug. Die ganze Aussage. Bitmanipulationen sind nötig, auch 
und gerade in C, und haben mit (fehlender) Portabilität wenig zu tun.
Eine Bitoperation ist auch nichts anders als die Multiplikation in 
deinem Beispiel. Beides sind High-Level Anweisungen welche der Compiler 
optimieren kann und wird.

: Bearbeitet durch User
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
Noch kein Account? Hier anmelden.