"binary constants are a GCC extension" bedeutet?

Das 0b... ist nicht Standard-C.

Nach ANSI- oder ISO- oder sonstwas C gibt es nur dezimale, oktale und 
hexadezimale Schreibweisen für ganze Zahlen.

Nachdem man das gesehen und verstanden hat, spricht aber nichts dagegen, 
es zumindest in so einem Fall zu verwenden - schließlich ist jedes 
Registergefummel per se unportabel.
Moderator
Die standardkonforme Methode (für 8-Bit-Werte) geht so:
1
// Makrodefinition:
2

3
#define B(x) \
4
  0##x >>  0 & 0x01 | \
5
  0##x >>  2 & 0x02 | \
6
  0##x >>  4 & 0x04 | \
7
  0##x >>  6 & 0x08 | \
8
  0##x >>  8 & 0x10 | \
9
  0##x >> 10 & 0x20 | \
10
  0##x >> 12 & 0x40 | \
11
  0##x >> 14 & 0x80
12

13
// Anwendung:
14

15
unsigned char a[] = {
16
  B(11111111),   // 255
17
  B(0),          //   0
18
  B(101),        //   5
19
  B(10101010),   // 170
20
  B(00000001),   //   1
21
  B(10000000)    // 128
22
};

Für 16- und 32-Bit-Werte kann das Makro entsprechend erweitert werden.
Aber wer schreibt schon so große Zahlen im Dualsystem?
Rufus Τ. Firefly schrieb:
> Yalu X. schrieb:
>> Aber wer schreibt schon so große Zahlen im Dualsystem?
>
> Mir ist sogar unbegreiflich, worin der Reiz liegt, 8-Bit-Zahlen binär zu
> notieren; können die Leute heutzutage kein Hex mehr?

Ehrlich gesagt, finde ich diese Schreibweise fallweise für 
angebracht.Speziell wenn es Register im AVR-µC betrifft, wo man gerne 
was auf 1<<ADMUX z.B. Aber jene Bits eines Registers, die auf 0 bleiben 
haben ja auch ihre Bedeutung und das ist dann deutlicher zu sehen.
Aber letztlich Geschmackssache, denke ich. Ich komme von der 
Assemblerseite, wo ich das schätzte. Bin jetzt noch in der C-Lernphase.

LG Rudi
Persönliche Seite
Rudi D. schrieb:
> Ehrlich gesagt, finde ich diese Schreibweise fallweise für
> angebracht.Speziell wenn es Register im AVR-µC betrifft, wo man gerne
> was auf 1<<ADMUX z.B. Aber jene Bits eines Registers, die auf 0 bleiben
> haben ja auch ihre Bedeutung und das ist dann deutlicher zu sehen.
> Aber letztlich Geschmackssache, denke ich. Ich komme von der
> Assemblerseite, wo ich das schätzte. Bin jetzt noch in der C-Lernphase.

Das musst du jetzt mal mit einem Beispiel unterlegen.

In den meisten Fällen ist die Binärschreibweise die schlechteste 
Alternative.
Simon K. schrieb:
> Das musst du jetzt mal mit einem Beispiel unterlegen.

z.B. einen Zeichensatz für ein Grafikdisplay:
1
const uint8_t font[256][8] PROGMEM = {
2
...
3
{0x0E,0x11,0x01,0x02,0x04,0x08,0x1F,0x00},
4
...
vs.
1
const uint8_t font[256][8] PROGMEM = {
2
...
3
{
4
        0b00001110,
5
        0b00010001,
6
        0b00000001,
7
        0b00000010,
8
        0b00000100,
9
        0b00001000,
10
        0b00011111,
11
        0b00000000
12
},
13
...

Man kann das zwar auch anders machen...aber als Beispiel...
Gast
Noch ein Beispiel: Fuer meine Menusteuerung gebe ich binaer vor, in 
welche Zeilen anklickbar sind. Und es gibt sicher noch viele andere 
Gruende.

Ich dachte, die "Wer braucht das?"-Fraktion treibt sich im heise-Forum 
herum. Eigentlich draengt sich die Frage "Warum haben sie binaer weg 
gelassen, aber oktal eingebaut?" auf.
Marwin schrieb:

> Ich dachte, die "Wer braucht das?"-Fraktion treibt sich im heise-Forum
> herum. Eigentlich draengt sich die Frage "Warum haben sie binaer weg
> gelassen, aber oktal eingebaut?" auf.

Hat historische Gründe.
Auf der PDP war Oktal das, was für heutige Rechner Hex ist.

Unverständlich ist für mich höchstens, warum der Schmuh immer noch 
drinnen (und vor allen Dingen in dieser Form!) ist.
Rufus Τ. Firefly schrieb:

> Mir ist sogar unbegreiflich, worin der Reiz liegt, 8-Bit-Zahlen binär zu
> notieren; können die Leute heutzutage kein Hex mehr?

Wer damit angefangen hat, Rechner in Hex zu programmieren, der braucht 
kein Binär, der sieht die Bits auch so. Aber macht sich heute noch die 
Mühe, "Rechner" mit Hex-Tastatur und 7-Segment-Display zu bauen? Ausser 
ein paar Computer-Historikern.
Rufus Τ. Firefly schrieb:

> Man muss sich nur 16 Bitmuster merken ... oder herleiten können. Sollte
> eigentlich kein Problem sein, wo doch heutige Telephonnummern auch immer
> länger werden.

Da gibts aber ein definiertes Limit, mehr als 15 Ziffern ist nicht drin. 
Ausserdem müssen viele erst ihr Telefon fragen, welche Nummer die grad 
verwendete Karte hat.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.