Seite 1 von 1

Bit in einem Byte Setzen

Verfasst: 17. März 2010 14:26
von Mido
hallo ,

ich hab ein klein Widget mit 8 Tasten (QPushButton ) und jetzt will ich jede Taste mit einem Bit einer "char" Variable verbinden und zwar :
drücke ich die 1. Taste wird das 1. Bit gesetzt
drücke ich die 2. Taste wird das 2. Bit gesetzt......... usw.

wie kann das programmieren?
ich wäre für eure Hilfe sehr dankbar!

Verfasst: 17. März 2010 16:08
von Lord_Luncher
ich weiss nicht ob ich dich richtig verstanden habe aber eine Möglichkeit wäre:

Char val = 0;
Jeweils bei dem Klick auf ButtonX wobei X 0-7 ist:
val += 2^X; // Bit X auf 1 setzen
Und beim Release:
val -= 2^X; // Bit X auf 0 setzen

Achtung wenn ein bit 2 mal gesetzt wird dann ist zwar der bit wieder null aber der nachfolgende bit ist 1 wenn der vorher 0 war.
Um das zu verstehen musst du dich mit dem dualsystem auseinander gesetzt haben.

Ich hab keine ahnung ob das das ist was du suchst... dafür müsstes du dein Problem genauer beschreiben.

Verfasst: 17. März 2010 17:25
von TSS
Ne andere Möglichkeit wären Bit-Operatoren:
siehe z.B. http://de.wikibooks.org/wiki/C%2B%2B-Pr ... pulationen

Wenn du die Bits beim 1. klicken auf 1 und beim 2. dann wieder auf 0 setzen willst, kannst du z.B. das Bitweise XOR (^) verwenden.

Wie es genau funktioniert solltest du im Internet ausführlich erklärt finden.

Verfasst: 17. März 2010 20:07
von kater
Wenn ich mich nicht arg vertute geht das so

x |= (1 << 5); Setzte das 5. Bit in x auf 1

x &= ~(1 << 5); Setzt das 5. Bit in x auf 0


Siehe hier http://www.mikrocontroller.net/articles/Bitmanipulation

Verfasst: 17. März 2010 20:39
von TSS
Das ist mit dem xor noch etwas einfacher:

x ^= 2^4 //5. Bit auf 1

x ^= 2^4 //5. Bit auf 0

So muss man auch nicht unterscheiden ob es schon auf 1 steht oder nicht.

Verfasst: 17. März 2010 20:48
von upsala
@TSS: Bist du dir da sicher?

Verfasst: 17. März 2010 21:01
von TSS
Hm, die Schreibweise ist etwas krumm xD

Das 2^4 soll "2 hoch 4" heißen, das andere ^ ist der Bit-Operator.

Wenn x=0 ist:
x ^= 16 //5. Bit von rechts auf 1

Dann stimmt das was ich geschrieben habe aber.

Verfasst: 18. März 2010 08:32
von pfid
x |= 0x01
x &= ~0x01