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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.