Wieso? Der Fehler ist offensichtlich. Man muss dem Compiler (genauer dem Parser) mitteilen wie Literale zu interpretieren sind. Er kann das nicht aus dem Kontext erraten.
Interessante Sache dazu: es gab im C++ Standard sehr lange keine Binär-Literale. Die gibt es erst neuerdings mit C++14. Was vorher ging stammt entweder aus GCC (0b) oder der Arduino Software (B)
Was vorher ging stammt entweder aus GCC (0b) oder der Arduino Software (B)
Alle C / C++ Compiler die ich kenne, konnten schon immer die 0b -Schreibweise.
Das Arduino B definiert einfach 256 Namen für alle Bitmuster eines Bytes. (igitt)
Ich teste nicht, ob B0001 , B01, B00000001 und alle anderen Schreibweisen für eine 1 definiert sind.
michael_x:
Alle C / C++ Compiler die ich kenne, konnten schon immer die 0b -Schreibweise.
Es ist nicht teil des C++ Standards. Compiler können das durchaus hinzufügen aber das ist nicht immer der Fall. Microsoft Visual C++ z.B. kann es erst seit VS2015:
Auch sonst siehst du dass der Compiler auch die Standard Sachen nicht vollständig umsetzt, bzw. das nur Schritt für Schritt tut
Wilgelmy:
und zwar habe ich eine 5 bit Binärzahl also z.B. Bin = 10011;
Andersherum funktioniert es doch auch wenn ich Dec = 3; habe und ich dann Serial.println(Dec,BIN); eingebe kommt da ja auch 101 raus.
Du solltest verstehen, daß der Wert einer Variablen sehr unterschiedlich dargestellt werden kann, als BIN, DEC, HEX usw. Der Wert hängt auch nicht vom Namen der Variablen ab, egal ob die Bin oder Dec heißt. Deshalb wird mit
Bin = 10011;
Bin auf 10011 gesetzt, nicht auf 19, und mit
Dec = 3;
Dec auf 3, was binär nicht "101" gibt sondern "11".
Eine Umwandlung von Werten ist weder möglich noch notwendig, für eine unterschiedliche Darstellung reicht z.B.
Wurde schon geklärt, woher die 'Binär-Zahlen' stammen?
Kann mir nur schwer vorstellen, daß ein Binärwert erst in einen String/char-Array umgewandelt wird, um Das dann zu übertragen.
(und wenn doch, könnte man diese Zeichenkette abgehen und die 2er Potenzen zusammen addieren)