Hallo, es gibt schon einige Threads zu diesem Thema. Da ich Anfänger bin verstehe ich da nicht viel. Ich habe folgendes Problem. Ich möchte ein bit aus einem Byte in eine BitVariable schreiben. unsigned char CHR = 0x00; bit BT = 0; BT = CHR[7]; oder z.B. BT = CHR[2]; usw. hab die Lösung aus einem Tutorial. Der Compiler (codevision) möcht´s aber nicht nehmen. Hat jemand vielleicht einen Tipp für mich was ich falsch mache, oder wie ich das vielleicht Lösen kann? schonmal Danke Grüße ghd
O1 H. schrieb: > Hat jemand vielleicht einen Tipp für mich was ich falsch mache, oder > wie ich das vielleicht Lösen kann? Zumindest fragst du im falschen Forum: das hier ist mit "GCC" überschrieben -- und der GCC kennt keine Bitvariablen. Allerdings kennt der GCC Bitfelder, denn die sind Standard-C. Ein Byte ist kein Array, daher kann man es nicht indizieren. Du kannst höchstens einzelne Bits testen mit dem &-Operator:
1 | if (value & 0x80) { |
2 | /* bit 7 ist gesetzt */
|
3 | } else { |
4 | /* bit 7 ist gelöscht */
|
5 | }
|
oh, sorry. Ist es möglich den Thrad an die richtige Stelle zu verschieben? OK. also CHR & 0x80 wenn 1 dann mach das wenn 0 dann mach das aber was 0x80 soll verstehe ich nicht ganz. Ist das das "obere" Bit 8? vielen Dank.
Noch einer, der in 5 Minuten programmieren lernt. Ja, ja, die 1-Stunden-Crash-Kurse sind einfach zu langweilig. :-}
O1 H. schrieb: > aber was 0x80 soll verstehe ich nicht ganz. > Ist das das "obere" Bit 8? Betrachte doch mal die Bits: 0x80 = 0b10000000
Grrr schrieb: > Noch einer, der in 5 Minuten programmieren lernt. > Ja, ja, die 1-Stunden-Crash-Kurse sind einfach zu langweilig. > :-} Na dann Poste doch mal ne einfache super geniale Lösung. :-)
O1 A. schrieb:
> Na dann Poste doch mal ne einfache super geniale Lösung. :-)
Gerne. Hab den 4-Minutenkurs entwickelt. Aber den Rest an Neuronen
kannst Du dann vergessen. He, he.
Grrr schrieb: > O1 A. schrieb: >> Na dann Poste doch mal ne einfache super geniale Lösung. :-) > > Gerne. Hab den 4-Minutenkurs entwickelt. Aber den Rest an Neuronen > kannst Du dann vergessen. He, he. da ist wohl der Peter Perfect vom Himmel gefallen. Kleiner MiesePeter was
O1 A. schrieb: > da ist wohl der Peter Perfect vom Himmel gefallen. > Kleiner MiesePeter was Ein kleines bischen bescheidener könntest DU jedenfalls sein. Denn, das 0x80 = 0b10000000 ist, ist nun wirklich das Einmal-Eins der Informatik.
O1 A. schrieb: > also CHR & 0x80 > > wenn 1 dann mach das und das mag zwar intuitiv sein, führt aber trotzdem des öfteren in die Sackgasse, aus der Neulinge nicht mehr alleine herauskommen. Besser ist die sichtweise wenn ungleich 0, dann mach etwas wenn 0, dann mach etwas anderes. Diese Siecht der Dinge solltest du dir generell angewöhnen. Erspart dir viel Frust. Und als nächstes lernst du die Tabelle der Hex-Digits und ihre zugehörigen Bitmuster auswendig Hex Dezimal Binär Hex Dezimal Binär 0 0 0000 8 8 1000 1 1 0001 9 9 1001 2 2 0010 A 10 1010 3 3 0011 B 11 1011 4 4 0100 C 12 1100 5 5 0101 D 13 1101 6 6 0110 E 14 1110 7 7 0111 F 15 1111 Eine Hex-Zahl wie 0x8A sind dann einfach die Bitmuster für 8 und für A aneinandergereiht. 0x8A ist also auf Bitebene 10001010 Wenn du µC programmieren willst, dann kennt man diese Tabelle auswendig, weil man viel mit Hex-Zahlen und ihrer Bitrepräsentierung zu tun hat. Hinweis: Die Tabelle ist nicht wirklich schwer zu lernen. Da gibt es ein paar Zusammenhänge * Alle ungeraden Zahlen haben an der letzten Stelle binär eine 1 * Alles über/gleich 8 hat an der ersten Stelle eine 1 * 7 und F merkt man sich leicht. Das eine ist 0111, das andere 1111 * Auch die 2-er Potenzen 1, 2, 4, 8 sind simpel. Nur 1 einziges 1 Bit, welches immer um 1 Stelle nach links wandert 0001 0010 0100 1000 * A, also dezimal 10, hat das Bitmuster '2 mal 10', also 1010 * und den Rest dazwischen kann man leicht im Kopf durch weiterzählen einer der besonderen vorhergehenden Zahlen bestimmen.
Vielen Dank für die Hilfe! Hilft mir sehr! Und sorry nochmals wenn´s genervt hat, bin halt kein experte. Gruß
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.