Hallo ich habe folgende Frage: In Assembler kann man ja einer Variable einen binärdargestellten Wert übergeben mov SCON,#01000000b geht sowas auch in C, wenn ja wie, habe bisher nur die Darstellung in Oktal Hexdezimal dezimal hinbekommen....
1 | #define B8(y) ( 0##y & 1 \
|
2 | | 0##y >> 2 & 2 \
|
3 | | 0##y >> 4 & 4 \
|
4 | | 0##y >> 6 & 8 \
|
5 | | 0##y >> 8 & 16 \
|
6 | | 0##y >> 10 & 32 \
|
7 | | 0##y >> 12 & 64 \
|
8 | | 0##y >> 14 & 128 )
|
9 | |
10 | |
11 | char test(void) |
12 | {
|
13 | return B8(10100101); |
14 | }
|
Peter
qwertz wrote:
> variable = 0b1000000000000001;
Das ist (unverständlicherweise) nicht standardisiert und funktioniert
nur bei manchen Compilern.
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.
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. ;-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.