Datum:
Hallo Forum. Was bedeutet denn die Warning "binary constants are a GCC extension"? Die Warning zeigt auf folgende Zeile:
DDRB = 0b11111000; |
Wüsste jetzt aber nicht warum der da ne Warning wirft... Steven
Datum:
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.
Datum:
Oh, okay. Finde ich aber sehr praktisch das man sowas darf. Bleibt also drin ;)
Datum:
Ist die Option -pedantic beim gcc Aufruf gegeben? Dann warnt gcc, wenn zum Standard inkompatible Erweiterungen verwendet werden.
Datum:
Die standardkonforme Methode (für 8-Bit-Werte) geht so:
// Makrodefinition: #define B(x) \ 0##x >> 0 & 0x01 | \ 0##x >> 2 & 0x02 | \ 0##x >> 4 & 0x04 | \ 0##x >> 6 & 0x08 | \ 0##x >> 8 & 0x10 | \ 0##x >> 10 & 0x20 | \ 0##x >> 12 & 0x40 | \ 0##x >> 14 & 0x80 // Anwendung: unsigned char a[] = { B(11111111), // 255 B(0), // 0 B(101), // 5 B(10101010), // 170 B(00000001), // 1 B(10000000) // 128 }; |
Für 16- und 32-Bit-Werte kann das Makro entsprechend erweitert werden. Aber wer schreibt schon so große Zahlen im Dualsystem?
Datum:
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?
Datum:
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
Datum:
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.
Datum:
Simon K. schrieb: > Das musst du jetzt mal mit einem Beispiel unterlegen. z.B. einen Zeichensatz für ein Grafikdisplay:
const uint8_t font[256][8] PROGMEM = { ... {0x0E,0x11,0x01,0x02,0x04,0x08,0x1F,0x00}, ... |
vs.
const uint8_t font[256][8] PROGMEM = { ... { 0b00001110, 0b00010001, 0b00000001, 0b00000010, 0b00000100, 0b00001000, 0b00011111, 0b00000000 }, ... |
Man kann das zwar auch anders machen...aber als Beispiel...
Datum:
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.
Datum:
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.
Datum:
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.
Datum:
A. K. schrieb: > der braucht kein Binär, der sieht die Bits auch so. 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.
Datum:
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.