bit aus char

Gast #1580759
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
Moderator Persönliche Seite #1580774
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
  }
Gast #1580786
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.
Gast #1580823
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. :-)
Gast #1580848
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
Gast #1580859
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.
#1580870
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.

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