Binärzahl eingeben

OP #411447
Lesenswert?
• ▲
▼
Hallo allerseits,

nur eine kurze Frage mit (hoffentlich) kurzer Antwort:

Gibt es eine Möglichkeit im GCC eine Binärzahl einzugeben? Bei
Hexdezimal-Zahlen muss ich ja das Perfix 0x voranstelen. Gibt es da
eine analoge Schache bei binär? Oder kann man da ein Makro definieren?

MfG
Christian

PS: Zum Thema Makros: Kann ich eigentlich einen Code definieren, der
mit zur Compile-Zeit durchlaufen wird (z.Bsp. Berechnung von pi (nur
Beispiel! Ich waeiß, das gibt's in der lib.)) und dann als Konstante
zur Verfügung steht?
#411451
Lesenswert?
• ▲
▼
Machs mit nem Macro, dann ist es portabel:
1
#define B8(y)  ((unsigned char)(
2
                       0##y       &   1 \
3
                     | 0##y >>  2 &   2 \
4
                     | 0##y >>  4 &   4 \
5
                     | 0##y >>  6 &   8 \
6
                     | 0##y >>  8 &  16 \
7
                     | 0##y >> 10 &  32 \
8
                     | 0##y >> 12 &  64 \
9
                     | 0##y >> 14 & 128 ))

Und dann einfach: i = B8(10101010); // 0xAA


Es gibt ne gepatchte AVR-GCC Version, die 0b... versteht, aber das ist
nicht portabel.


Peter
Moderator Persönliche Seite #411455
Lesenswert?
• ▲
▼
> Warum gibt es
> kein offizielles Prefix für Binärwerte?

Weil die C-Päpste bei der letzten Überarbeitung des Standards
der Meinung waren, dass das keiner braucht und auch kein
nennenswerter Compiler bereits implementiert hätte.

Im Amtsenglisch des C rationale liest sich das dann so:

``A proposal to add binary constants was rejected due to
lack of precedent and insufficient utility.''

Ich habe meinen 0b-Patch bei GCC offiziell als Spracherweiterung
eingereicht.  Letztlich sind viele der früheren GCC-Erweiterungen
mittlerweile im Standard zu finden.  Wenn das mal endlich
angenommen und eingearbeitet worden ist, dann sollte sich zumindest
der Punkt ``lack of precedent'' bei der nächsten Überarbeitung
des Standards erledigt haben...
Moderator Persönliche Seite #411462
Lesenswert?
• ▲
▼
Dann solltest du dir wohl die Patches meiner FreeBSD-Versionen
angucken, ansonsten fehlt dir nicht nur die Unterstützung von
0b-Konstanten, sonder auch die für viele aktuelle AVRs.

Die Patches findest du im CVS unter:

http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/avr-gcc/files/
http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/avr-gcc-devel/files/

Manche davon sind sehr FreeBSD-spezifisch, aber manche sind auch
recht allgemein.  Ach so, du brauchst auch Patches für die binutils:

http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/avr-binutils/files/
Gast #411464
Lesenswert?
• ▲
▼
Ich gehe davon aus, dass das normal ist, oder etwa nicht???
Ich hab zumindest noch keine binary-packets für SuSE gefunden, die
einigermaßen aktuell sind; wenn ich mir da die neuste gcc-core
runterlade, sieht's da schon anders aus.

MfG
Christian

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.