www.mikrocontroller.net

Forum: PC-Programmierung Bit verschieben in C


Autor: Fred Bauer (natler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Ich möchte mit einer Bitmaske von 01111111 mit einem Byte Array 
überprüfen wo sich eine 0 befindet. Ich überprüfe die Bytes mit einer 
Oder Funktion weiß aber nicht ob das funktioniert. Ich weiß auch nicht 
wie ich einzelne Bits in einem Byte durchschieben kann.

mfg

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zum Anfang:

Bitmanipulation

Autor: Fred Bauer (natler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja da stehts ja nur wie man portsbits verschiebt
was ist aber mit bytes
ich ja jetzt zum bsp ein byte a=0b10101111;
und eine bitmaske mit byte maske=0b0111111;

dann frag ich ab mit if((a | mask) == mask) ab ob sich an der stelle 
eine 0 befindet
jetzt weiß ich aber nicht wie ich die 0 weiter schiebe

Autor: michel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also wenn du mit 2 multiplizierst oder durch 2 dividierst, kannst du 
eine 1 "verschieben", falls dir das weiterhilft.

also von links nach rechts schieben /2
von rechts nach links schieben *2

Autor: Fred Bauer (natler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich will halt eine 0 verschieben
ist das überhaupt möglich oder muss ich ne 1 verschieben und 
invertieren?

Autor: michel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab noch nie versucht ne 0 zu verschieben,
wenn du aber mit if((a & mask)==mask) abfragst, sollte es auch 
funktionieren.
damit findest du dann halt die 1 anstatt die 0.

Autor: Fred Bauer (natler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jetzt hab ich die Schiebeoperatoren verstanden
da kann ich eh immer ne 1 nachschieben und nach 8 mal schieben setz ich 
das byte neu
damit müsste die 0 immer weiter verschoben werden

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ob 1 oder 0 ist egal. Geschoben wird unabhängig vom Inhalt
  unsigned char a = 0b10101111;
  a >> 3;
Dann steht in a 0b00010101
Achtung bei "signed", wenn das erste bit eine "1" ist wird ne 1 
nachgeschoben und keine 0. Aus
  char a = 0b10101111;
  a >> 3;
wird dann 0b11110101.

Autor: Fred Bauer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So hab jetzt noch ein anderes Problem.
Ich brauch jetzt statt einem byte array ein char array.

Kann ich bei einem char array auch die bitmanipulation anwenden?

z.B:

char a=0b01010101;
a |=(1<<5);

Geht das?


mfg

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erkläre mit mal den Unterschied zwischen byte und char! Für mich ist es 
beides 0x00-0xFF, also 8 Bit.

>char a=0b01010101;
Sieht mir nicht wie ein Array aus.
char a[]={0b01010101, 0b011001100, 0b11110000};
Das ist ein Array, aber auch da gehts natürlich.


>a |=(1<<5);

>Geht das?
Probiers doch aus, das kompilieren dauert doch nur ein paar ms.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.