mikrocontroller.net

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


Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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....

Autor: qwertz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
unsigned int variable;

variable = 0b1000000000000001;

Autor: qwertz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder in HEX
unsigned int variable;

variable = 0hFFFFFFFF;

Autor: Ralph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es geht.

Les mal die Doku zu deinem Compiler.

Autor: Kartoffel Salat (kartoffelsalat)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

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


char test(void)
{
 return B8(10100101);
}


Peter

Autor: qwertz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder in dezimal
unsigned int variable;

variable = 65535;

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
qwertz wrote:
> variable = 0b1000000000000001;

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

Autor: Chrisi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.