Zahlen binär in C

Gast #632852
Lesenswert?
• ▲
▼
Hey Peter, Dein Code geht aber nur, wenn der Integer ein 32-Bit-Typ ist, 
da die übergebene Zahl maximal in einen Integer von 1+3*7, also 22 Bits 
aufgebohrt wird. Insofern müsste man den Compiler weiter quälen:

#define B8(y) ((char)( \
    ( 0##y##L       &   1 \
    | 0##y##L >>  2 &   2 \
    | 0##y##L >>  4 &   4 \
    | 0##y##L >>  6 &   8 \
    | 0##y##L >>  8 &  16 \
    | 0##y##L >> 10 &  32 \
    | 0##y##L >> 12 &  64 \
    | 0##y##L >> 14 & 128 )))

Ich lasse das mal zur weiteren Diskussion, da ich's nicht getestet habe.
Moderator Persönliche Seite #632867
Lesenswert?
• ▲
▼
Andreas Schwarz wrote:

> Das ist (unverständlicherweise) nicht standardisiert und funktioniert
> nur bei manchen Compilern.

Da GCC meine Implementierung nunmehr akzeptiert hat, hoffe ich, dass
wir gute Chancen haben, dass es im nächsten C-Standard drin sein
könnte. ;-)

Im C99-Rationale heißt es nämlich lapidar:

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

Wenn sie schon die "utility" einer solchen Idee nicht einsehen wollen,
können sie sich bei der nächsten Standardisierungsrunde nun wenigstens
nicht mehr mit ``lack of precedent'' rausreden. ;-)

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