Hallo fredyxx,
Möglichst klein
float und double sind PF-Werte, und können, ohne FPU, nur durch eine Bibliothek bearbeitet werden.
char, int und long hängen von der Implementierung, bzw. CPU ab. auf 8-Bitern ist int meistens 16-Bit lang und auf 16-Bitern 32-Bit.
K&R definierte mal:
Garantiert ist nur, dass char <= int <= long ist.
Ein char darf also auch 48-bit belegen.
Es gab/gibt auch CPUs mit anderen Wortbreiten z.B. 9, 12, 18, 36 und 48 Bit waren sehr verbreitet und entsprechend sind da die Bit-Breiten der C-Datentypen.
Weil es Programme gibt, welche nur bei bestimmten Bit-Breiten funktionieren, hat man die uintxx_t Typen eingeführt. Ein unsigned 8-Bit-Wert kann nur Werte zwischen 0...255, ein 16-Bit 0...65'335 und 32-Bit 0...4'294'967'295 annehmen. Grössere Werte führen zu einem Überlauf und falschen Ergebnissen!
uint8_t, uint16_t, uint32_t usw. haben, unabhängig von der Implementierung, garantierte Bit-Breiten.
Welche Variante die kleinste ist, welche du nehmen kannst, hängt also davon ab, welchen Wertebereich die Variable aufnehmen können muss.
Ich bin jetzt zu faul dies in deinem Programm nachzusehen.
Eine 8-Bit CPU kann einen 8-Bit Werte mit einem einzigen Maschinenbefehl verarbeiten, 16-Bit Operationen benötigen oft schon mehrere Befehle. Das hängt vom Befehlssatz der CPU ab und wie man 8-Bit CPU definiert!
Der Arduino MEGA hat einen ATmega1280 als CPU und diese kann nur 8-Bit direkt verarbeiten.
Die reale Welt ist halt nun nicht binär und lässt sich nicht mit Ja und Nein beantworten.
MfG Peter(TOO)
Lesezeichen