Forum: Compiler & IDEs bit aus char


von O1 A. (Gast)


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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
  }

von O1 A. (Gast)


Lesenswert?

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.

von Grrr (Gast)


Lesenswert?

Noch einer, der in 5 Minuten programmieren lernt.
Ja, ja, die 1-Stunden-Crash-Kurse sind einfach zu langweilig.
:-}

von Christoph S. (mixer) Benutzerseite


Lesenswert?

O1 H. schrieb:
> aber was 0x80 soll verstehe ich nicht ganz.
> Ist das das "obere" Bit 8?

Betrachte doch mal die Bits:
0x80 = 0b10000000

von O1 A. (Gast)


Lesenswert?

OK. Habs verstanden. Danke.

von O1 A. (Gast)


Lesenswert?

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. :-)

von Grrr (Gast)


Lesenswert?

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.

von O1 A. (Gast)


Lesenswert?

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

von Grrr (Gast)


Lesenswert?

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.

von Grrr (Gast)


Lesenswert?

Aber meine Bemerkung war überflüssig.
Es wäre besser ich hätte sie unterlassen.

von Karl H. (kbuchegg)


Lesenswert?

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.

von O1 A. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.