Guten morgen zusammen, ich habe mal ne Frage bezüglich der Bitmanipulation. Bin noch Anfänger desshalb verzeiht mir die Frage. Ich möchte im Prinzip immer ein Bit einlesen und dann aneinander reihen in einem Byte Wenn ich das wie unten aufgeführt mache ist dann davon auszugehen das die Bits aneinander gereiht werden oder schon beim 2. Durchlauf der Schleife das MSB nach vorne hinaus geschoben wird? Muss ich das eventuell mit einer Oder verknüpfung realisieren? for(k = 7; k >= 0; k--)//Herunterzählen der Variable k von 7 bis 0 { einlesebyte = einlesebit<<k; } Danke schonmal für eure Hilfe.
Nico G. schrieb: > einlesebyte = einlesebit<<k; Damit wird einlesebyte in jedem Schleifendurchlauf neu definiert, sodass du immer nur das aktuelle einlesebit verschoben um k in einlesebyte hast. Guck dir zum Thema Bitmanipulation mal folgendes an: http://www.mikrocontroller.net/articles/Bitmanipulation Im Prinzip kannst du einlesebyte mit Null initialisiren und dann die verschobenen Einlesebits oder-Verknüpfen
Ich kann dir nur raten:spiel die Operationen mal auf dem Papier durch! Dein Verstädnnis dafür, was passiert, wenn du Code siehst, wird einen großen Schritt nach vorne machen. Es ist wirklich nicht schwer: Spiel Computer und arbeite dein 'Programm' ab. Mach genau das, was dort steht, nicht was du denkst was passieren müsste, sondern das was auf dem Papier steht. Variablen 'simulierst' du, indem du ihre Werte auf Papier festhältst und sie entsprechend veränderst. Und nein, schmunzle nicht darüber. Das ist tatsächlich und ernsthaft eine exzellente Methode, wie man sich klar macht, was genau ein bestimmmter Code für Auswirkungen hat und was er tut.
> k >= 0;
DIese Bedingung ist immer erfüllt, wenn Du ein uint dafür verwendest.
1 | uint8_t u8Mask = 0x80; |
2 | uint8_t u8Result = 0x00; |
3 | |
4 | while ( u8Mask != 0 ) |
5 | {
|
6 | if ( einlesebit ist gesetzt ) |
7 | {
|
8 | u8Result |= u8Mask; |
9 | }
|
10 | |
11 | u8Mask = (u8Mask >> 1); |
12 | }
|
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.