ich stolpere immer wieder ueber Codebeispiele, welche besonders schnell, originell, schoen, nuetzlich oder anderweitig bemerkenswert sind.
Deshalb beginne ich hier mal einen Thread, wo ich das fuer Euch (und mich) sammle.
Heute: Eine speichersparende "funkelnde Sterne" Animation, welche kein extra Array benoetigt, um den Zustand der LEDs (wird gerade heller oder wird gerade dunkler) zu speichern - es wird stattdessen das niedrigste Bit vom Rot Kanal dafuer benutzt.
Und das Ganze mit nur 8 Zeilen Code...
Das ist kein eigener Operator, sondern zwei NOTs hintereinander. Das macht aus einer Zahl entweder 0 oder 1.
!x ist das gleiche wie (x == 0 ? 1 : 0), d.h. gibt 1 zurück, wenn der Wert 0 ist
!!x ist das gleiche wie (x != 0 ? 1 : 0), d.h. gibt 1 zurück wenn der Wert ungleich 0 ist
Das stammt aus früheren C Zeiten, wo es noch keinen eigenen Datentyp bool gab und man einfach einen ein typedef auf unsigned char genommen hat (was allerdings auch die Arduino IDE so macht). Es ist aber noch ein weit verbreitetes Idiom, genauso wie einige andere Eigenheiten die man heute nicht mehr unbedingt bräuchte, aber historisch geblieben sind, weil einfach Code abgeschrieben wird (z.B. typedefs von structs in C++, was in den aller meisten Fällen nur in C was bringt).
Man sollte das aber nur verwenden wenn unbedingt nötig, z.B. bei APIs die in C geschrieben sind. Manchmal wird es auch gemacht um bestimmte Warnungen zu unterdrücken.