Implementierung von Binärzahlen?

Gast #6443
Lesenswert?

Nabend und frohes Jahr 2003!

Langsam fängt es mich an zu stören dass der GCC keine Zahlen in 
Binärschreibweise unterstützt...

Ich habe mir, wie viele andere wohl auch, per
#define b00000000 0
#define b00000001 1
#define b00000010 2
#define b00000011 3
[...]
abhilfe geschaffen, lieber währe es mir jedoch wenn der Syntax der selbe 
währe wie bei den Hex-Zahlen: z.B.: 0b00000010

Ich kenne mich mit den Compiler selber nicht so gut aus, aber vielleicht 
kann man ihm das in irgendeiner File begreiflich machen?! Per #define 
geht es ja leider nicht, wegen der führenden "0"..
Gast #6445
Lesenswert?

Da gab es auch mal etwas mit einem Bitfeld in Kombination mit einem 
Makro.
Aber so richtig begeistern kann dies alles nicht. Eigentlich schade.

Gibt es hier wirklich keine elegantere Lösung?

Notker
#6446
Lesenswert?

Hallo Notker,

ist alles reine Gewöhnungssache, ich komme mit meinem Macro ganz gut 
zurecht.

Wenn Du unbedingt Deine eigenen Syntaxregeln aufstellen willst, must Du 
eben den C-Compiler selber schreiben.


Jede Sprache hat nun mal ihre Unterschiede und die muß man lernen.


Peter
Gast #6447
Lesenswert?

Interessant fände ich zuweilen 0b als Prefix auch, andere Compiler
können wohl sowas, und es scheint auch dem Standard nicht komplett
zu widersprechen, das als Erweiterung zu haben.

Ändern müßte man die Funktion cpp_classify_number() in der Datei
cppexp.c, falls das jemand mal tun will... ;-)
Admin Persönliche Seite #6448
Lesenswert?

Das mit 0b wäre schon nett, aber wenn es dann irgendwann Programme gibt 
die sich nur noch mit gepatchten GCCs kompilieren lassen kann das ja 
auch nicht Sinn der Sache sein... oder wie stehen die Chancen dass man 
sowas in den offiziellen GCC aufnehmen würde?

Freunde von Monster-Makros können sich hiermit behelfen (bei Bedarf 
verlängern):

#define BIN(x) \
        ((x%10)\
         |(((x/10)%10)<<1)\
         |(((x/100)%10)<<2)\
         |(((x/1000)%10)<<3)\
         |(((x/10000)%10)<<4)\
         |(((x/100000)%10)<<5)\
         |(((x/1000000)%10)<<6)\
         |(((x/10000000)%10)<<7)\
        )
Gast #6449
Lesenswert?

Ob nun "mitdenkendes" Makro oder die Liste von defines... Das ist Jacke 
wie Hose.

Nicht dass es ja garnicht geht, mir geht es halt nur um den letzten 
Schliff, das "0b" davor. Wenn man für den PC programmiert ist es relativ 
trivial, da man es eigentlich niemals braucht... aber bei den 
Mikrocontrollern sieht es da ja grundlegend anders aus...
Gast #6451
Lesenswert?

Wenn schon mit 0b, dann nur so, daß es auch im offiziellen gcc drin
ist, alles andere wäre in der Tat Unsinn.

Ob die gcc-Entwickler sowas akzeptieren würden, weiß ich nicht, aber
sie waren in der Vergangenheit großzügig mit eigenen Erweiterungen,
die über den Standard hinausgehen, insofern kann ich mir das schon
vorstellen (zumal es ja Präzedenzfälle gibt, irgendein Intel-Compiler
glaub ich).
Gast #6452
Lesenswert?

Naja, das problem ist mir noch nicht so einsichtig. man kann binär->hex 
doch relativ schnell im kopf rechnen. besonders, wenn man das andauernd 
braucht sollte sich das doch schnell üben.
Gast #6454
Lesenswert?

Da gcc 3.2 sowieso die aktuelle Version von avr-libc nicht mehr
unterstützt, was willst Du ihn da erst noch patchen?

Im übrigen sollte wohl auch die Ausschrift "illegal digit in octal
number" (oder so ähnlich) noch angepaßt werden. ;-)

Gedanklich war ich in den 3.3er Quellen auch schon so weit
vorgedrungen, ich hatte es nur noch nicht ausprobiert.

Irgendwo müßte man natürlich dann auch noch die Doku updaten, bevor
man das zu GNU schicken kann.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren