Forum: PC-Programmierung Bit verschieben in C


von Fred B. (natler)


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

von Patrick (Gast)


Lesenswert?

Zum Anfang:

Bitmanipulation

von Fred B. (natler)


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

von michel (Gast)


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

von Fred B. (natler)


Lesenswert?

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

von michel (Gast)


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.

von Fred B. (natler)


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

von Timmo H. (masterfx)


Lesenswert?

Ob 1 oder 0 ist egal. Geschoben wird unabhängig vom Inhalt
1
  unsigned char a = 0b10101111;
2
  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
1
  char a = 0b10101111;
2
  a >> 3;
wird dann 0b11110101.

von Fred Bauer (Gast)


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

von Timmo H. (masterfx)


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.
1
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.

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
Noch kein Account? Hier anmelden.