Forum: Mikrocontroller und Digitale Elektronik Zahlen binär in C


von Bernd (Gast)


Lesenswert?

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....

von qwertz (Gast)


Lesenswert?

unsigned int variable;

variable = 0b1000000000000001;

von qwertz (Gast)


Lesenswert?

oder in HEX
unsigned int variable;

variable = 0hFFFFFFFF;

von Ralph (Gast)


Lesenswert?

Es geht.

Les mal die Doku zu deinem Compiler.

von Kartoffel S. (kartoffelsalat)


Lesenswert?

in binär müsste eigentliuch auch gehen aber nimm doch:
1
scon = 0x40;

von Peter D. (peda)


Lesenswert?

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

von qwertz (Gast)


Lesenswert?

oder in dezimal
unsigned int variable;

variable = 65535;

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

qwertz wrote:
> variable = 0b1000000000000001;

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

von Chrisi (Gast)


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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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. ;-)

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
Noch kein Account? Hier anmelden.