Bitreihenfolge drehen und in Ziffern aufteilen

Gast #2095188
Lesenswert?

Moin

Ich weiß das das Thema schon oft behandelt wurde. Ich habe 
schätzungsweise mittlerweile die Hälfte der Themen durchgearbeitet und 
auch google bemüht. Aber ich verstehe nicht wie das funktioniert.
Ich habe eine 17-Bit binärzahl die ich spiegeln und in Ziffern aufteilen 
möchte(in c für einen ATMega 32). Um die Zahl zu drehen habe ich gelesen 
das man eine lookup-Tabelle nutzen kann oder das man das mit eine 
stackpointer schafft aber ich habe nirgends gefunden, wie man das 
wirklich realisiert.

Wär echt super wenn ihr mir da weiterhelfen könnt. Mir würde auch ein 
Link zu einem anderen thread reichen den ich vielleicht noch nicht 
gelesen habe auch wenn ich das nicht glaube ;-)


Danke schoneinmal im Voraus

Oli
#2095209
Lesenswert?

Hallo,

das ist ein bisschen durcheinander geraten,

Peter schrieb:
> uint8_t Bits[17];
>
> for( uint8_t b = 0; b < 17; ++b ) {
>    Bits[ b ] = (Zahl % 2);
>    b = b >> 1;
> }
Falls es wirklich 17 Bit sind
1
uint8_t Bits[17];
2
uint32_t temp32
3
temp32 = 1
4
for( uint8_t b = 0; b <= 17; ++b ) {
5
  if ((temp32 & Zahl) == 0 )
6
    Bits[ b ]= 0;
7
  else
8
    Bits[ b ]= 1;
9
   temp32  += temp32;
10
 }
Gast #2095225
Lesenswert?

Also er hat jetzt keine Fehlermeldung mehr also sollte es funktionieren 
aber ich verstehe nicht was das Programm genau macht. Könntest du 
vielleicht noch mal kurz die einzelnen Schritte beschreiben?!
Das wäre echt super
Gast #2095233
Lesenswert?

Horst Hahn schrieb:
> das ist ein bisschen durcheinander geraten,
>
> Peter schrieb:
>> uint8_t Bits[17];
>>
>> for( uint8_t b = 0; b < 17; ++b ) {
>>    Bits[ b ] = (Zahl % 2);
>>    b = b >> 1;
>> }

stimmt, es war so gemeint
1
uint8_t Bits[17];
2

3
for( uint8_t b = 0; b < 17; ++b ) {
4
   Bits[ b ] = (Zahl % 2);
5
   Zahl  = Zahl  >> 1;
6
}
Gast #2095297
Lesenswert?

So habe ich mir das gedacht:

uint8_t Bits[17]; // uint8_t ist die variable für den array? Ich vermute 
hier wird festgelegt, wie viel Bits einzulesen sind.

uint32_t temp32 // ?

temp32 = 1 // ?

for( uint8_t b = 0; b <= 17; ++b ) // was macht uint8_t hier? b bis 17 
hochzählen

{

 if ((temp32 & Zahl) == 0 ) // wenn temp32 und Ziffer1...17 gleich 0 
sind, dann ?

   Bits[ b ]= 0;        // ²

 else                   // ansonsten ?

   Bits[ b ]= 1;        // ²was passiert hier?

  temp32  += temp32;    // temp32 = temp32 + temp32 wofür?
Gast #2095299
Lesenswert?

Oliver schrieb:
> So habe ich mir das gedacht:
> ...

ich glaube du solltest dir ein C buch nehmen und es erstmal von Vorne 
anfangen zu lesen.
Du kommst ja noch nicht einmal soweit das Verfahren zu erkennen wie die 
Bits ermittelt werden, weil du den eigentlichen C code überhaupt  nicht 
verstehts.
Gast #2095313
Lesenswert?

Ganz einfach gesehen möchte ich 17 Bit, die ich seriell reinbekomme auf 
einer Anzeige darstellen. Es geht im Prinzip nur darum, dass es 
funktioniert und nicht um das Verständnis C zu programmieren, dazu habe 
ich leider keine Zeit ;-)
Gast #2095346
Lesenswert?

Oliver schrieb:
> Es geht im Prinzip nur darum, dass es
> funktioniert und nicht um das Verständnis C zu programmieren, dazu habe
> ich leider keine Zeit ;-)

Oh, dann hast Du dich -in meinen Augen- für dieses Forum 
disqualifiziert.

Hier gibt es Hilfe zur Selbsthilfe, und zwar viel, oft und fast immer 
sehr gut.

Wenn Du aber jemanden suchst, der deine Aufgaben macht, musst Du anders 
fragen oder / und auch woanders suchen.

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