Bitmanipulation Verständnisfrage

Gast #3060746
Lesenswert?

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.
Gast #3060751
Lesenswert?

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
#3060759
Lesenswert?

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.
Gast #3060761
Lesenswert?

> 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
}

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