Ich bin gerade etwas genervt. Bin mir nicht genau sicher in welchem compiler das problem liegt. Ich möchte einfach in visual c++ eine bitmaske in einen integer schreiben. Dabei bietet sich bei avr-gcc (nicht sicher ob es bei gcc auch geht!) einfach die schreibweise 0b10101010 etc. an. In meinem VC Programm geht dies nicht. Naja ich könnte alle bitmasken einfach konvertieren aber das finde ich blöd. Hat irgendjemand eine Idee wie man VC auf einfache weise beibringt dass die paar zahlen eine lächerliche bitmaske sind?!
Wahlweise: Schreib ein Makro, welches aus einer Dezimalzahl die Bits extrahiert, oder definiere dir Makros à la B00000000, B00000001.
Philipp Karbach schrieb: > Ich bin gerade etwas genervt. Musst du nicht. Lies ein gutes C-Buch und du findest heraus, dass es die Binärschreibweise in C eigentlich gar nicht gibt, sondern eine eigenmächtige Erweiterung des gcc darstellt. > irgendjemand eine Idee wie man VC auf einfache weise beibringt dass die > paar zahlen eine lächerliche bitmaske sind?! Eine portable Lösung wäre zb #define B00000000 0x00 #define B00000001 0x01 #define B00000010 0x02 #define B00000011 0x03 .... #define B11111110 0xFE #define B11111111 0xFF diese define legt man sich einmal in ein Header File und inkludiert es wenn man es braucht.
hmmm das ist zwar ziemlich um die ecke rum aber wenn es die sache erfordert :). danke.
Auch ganz nett ist:
1 | #define __BITS(b) \
|
2 | ( \
|
3 | ( (b / 0x10000000UL) & 1 ) << 7 | \
|
4 | ( (b / 0x1000000UL) & 1 ) << 6 | \
|
5 | ( (b / 0x100000UL) & 1 ) << 5 | \
|
6 | ( (b / 0x10000UL) & 1 ) << 4 | \
|
7 | ( (b / 0x1000UL) & 1 ) << 3 | \
|
8 | ( (b / 0x100UL) & 1 ) << 2 | \
|
9 | ( (b / 0x10UL) & 1 ) << 1 | \
|
10 | ( (b / 0x1UL) & 1) << 0 \
|
11 | )
|
12 | |
13 | #define BITS(b) __BITS(0x ## b ## UL)
|
So oder so ähnlich. Das mit dem '0x' ist nötig, damit aus führenden Nullen keine Oktalzahlen werden.
excel schrieb:
> ich hab mal eben mit EXCEL mir ein Auflistung erstellt
Das geht schief, das erste Zeichen des Makronamens muss ein Buchstabe
sein.
excel schrieb:
> ich hab mal eben mit EXCEL mir ein Auflistung erstellt
Das geht schief, das erste Zeichen des Makronamens muss ein Buchstabe
sein.
ja hast Recht. Dann müsste man(n) eben vor dem b und vor dem x jeweils
die Null rauslöschen
> ja hast Recht. Dann müsste man(n) eben vor dem b und vor dem x jeweils > die Null rauslöschen Nur vor dem 'b', auf keinen Fall vor dem 'x'.
Warum nicht einfach Hex-Schreibweise nehmen? Mit ein bischen Gewöhnung kann man die genauso gut lesen.
"Nur vor dem 'b', auf keinen Fall vor dem 'x'." da steh ich jetz auf dem Schlauch, wenn ich mit den defines z.b. schreibe 0b00000010 wird das b00000010 doch ersetzt durch x02 --> also steht dann 0x02 da!?!?
excel schrieb: > "Nur vor dem 'b', auf keinen Fall vor dem 'x'." > Nimm bitte den Knopf "Antwort mit Zitat". Dann lässt sich leichter verfolgen, wer auf wessen Posting antwortet und wer was gesagt hat > da steh ich jetz auf dem Schlauch, wenn ich mit den defines z.b. > schreibe 0b00000010 wird das b00000010 doch ersetzt durch x02 --> also > steht dann 0x02 da!?!? Das wird jetzt schwierig dir zu erklären. Auch wenn wir immer sagen, der Präprozessor macht nur Textersetzung, so hält er sich doch an gewisse Regeln. Kurz und gut: Wenn der Präprozessor in 0b00000010 den b00000010 Teil ersetzt, dann kommt da nicht 0x02 raus sondern 0 x02. Also 2 sog. "Tokens" hintereinander. Einmal das Token für die Konstante 0 und dann "x02" als davon getrennter Token.
Rolf Magnus schrieb: > Warum nicht einfach Hex-Schreibweise nehmen? Mit ein bischen Gewöhnung > kann man die genauso gut lesen. Und sogar besser. Bei 16 oder 32 Bit Binärzahlen viel Spass beim abzählen der Stellen! ;)
Karl heinz Buchegger schrieb: > Lies ein gutes C-Buch und du findest heraus, dass es die > Binärschreibweise in C eigentlich gar nicht gibt, sondern eine > eigenmächtige Erweiterung des gcc darstellt. soweit ich informiert bin ist das nichtmal eine erweiterung der der gcc einführt, sondern dass war doch ein patch für winavr ? Weil ich habe mir auch mal avr-gcc unter linux eingerichtet und da hat defaultmässig afaik die bitmasken nicht funktioniert.
Ulrich schrieb: > Karl heinz Buchegger schrieb: >> Lies ein gutes C-Buch und du findest heraus, dass es die >> Binärschreibweise in C eigentlich gar nicht gibt, sondern eine >> eigenmächtige Erweiterung des gcc darstellt. > > soweit ich informiert bin ist das nichtmal eine erweiterung der der gcc > einführt, sondern dass war doch ein patch für winavr ? Es ist eine Erweiterung von GCC. Ob dir ursprünglich mal aus einem Patch herrührte, weiß ich aber nicht.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.