"binary constants are a GCC extension" bedeutet?

#2626845
Lesenswert?

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 #2627868
Lesenswert?

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?
#2627968
Lesenswert?

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 #2628002
Lesenswert?

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.
#2632438
Lesenswert?

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 #2632518
Lesenswert?

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.
#2632573
Lesenswert?

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.
#2632658
Lesenswert?

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.

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