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
Gast
#887887
Zum Anfang: Bitmanipulation
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
Gast
#887922
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
ich will halt eine 0 verschieben ist das überhaupt möglich oder muss ich ne 1 verschieben und invertieren?
Gast
#887944
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.
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
Ob 1 oder 0 ist egal. Geschoben wird unabhängig vom Inhalt
1 | |
2 | |
Dann steht in a 0b00010101 Achtung bei "signed", wenn das erste bit eine "1" ist wird ne 1 nachgeschoben und keine 0. Aus
1 | |
2 | |
wird dann 0b11110101.
Gast
#890331
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
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 | |
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
Bitte melde dich an, um einen Beitrag zu schreiben.