Forum: Mikrocontroller und Digitale Elektronik Frage zu "C" -- übersetzungshilfe


von Klaus D. (kolisson)


Lesenswert?

hallo,

kann mir jemand kurz schreiben, was folgendes bewirkt:

#define KEY0  0
#define KEY1  1
#define KEY2  2

#define REPEAT_MASK (1<<KEY1^1<<KEY2) // repeat: key1, key2


also .. welches bitmuster findet sich jetzt in REPEAT_MASK

gruss klaus

von Sven (Gast)


Lesenswert?

0x01 ein Mal nach links geschoben: 0x02 --> 00000010 wenns nen byte ist.
0x01 zwei mal nach links geschoben: 0x04 --> 00000100 wenns nen byte 
ist.

0x02 XOR 0x04 = 0x06 --> 00000110 wenns nen byte ist.

Das alles natürlich nur dann, wenn das Schieben eine höhere Priorität 
hat als das XOR.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Bitmanipulation

EDIT:
0b00000010 ^ 0b00000100 = 0b00000110

Andere Schreibweise
#define REPEAT_MASK ((1<<KEY1)|(1<<KEY2))

von Karl H. (kbuchegg)


Lesenswert?

Klaus De lisson schrieb:
> hallo,
>
> kann mir jemand kurz schreiben, was folgendes bewirkt:

Aber nur sehr kurz

 a ^ b

ist die Exklusiv-Oder bitweise Verknüpfung von a und b


> also .. welches bitmuster findet sich jetzt in REPEAT_MASK

Das von  ( (1<<KEY1)  exor  (1<<KEY2) )
und da sich in diesem Fall die Bits nicht überlappen, ist das äquivalent 
zu einer Oder-Verknüpfung.

von Klaus D. (kolisson)


Lesenswert?

danke ..
das war schonmal super und ist damit geklärt.

gruss klaus

von Karl H. (kbuchegg)


Lesenswert?

Klaus De lisson schrieb:
> danke ..
> das war schonmal super

Eigentlich nicht.
Eigentlich sind das Grundlagen, die in jedem C-Buch stehen.
Eine Grundlage von noch mindestens 300 weiteren, die alle in einem 
C-Buch zusammengefasst sind

von tuppes (Gast)


Lesenswert?

Klaus De lisson schrieb:
> #define REPEAT_MASK (1<<KEY1^1<<KEY2) // repeat: key1, key2

Ich frage mich, ob nicht eigentlich das hier gemeint ist:

#define REPEAT_MASK ((1<<KEY1) | (1<<KEY2))

also statt der XOR-Verknüpfung die bitweise Oder-Verknüpfung.

Man sollte sich angewöhnen, genau das zu programmieren, was man meint, 
und nicht irgendwas anderes, was nur zufällig im vorliegenden Fall 
dasselbe Ergebnis liefert.

von Klaus D. (kolisson)


Lesenswert?

@ karl heinz,

>Eigentlich nicht.
>Eigentlich sind das Grundlagen, die in jedem C-Buch stehen.
>Eine Grundlage von noch mindestens 300 weiteren, die alle in einem
>C-Buch zusammengefasst sind

im prinzip gebe ich dir recht. nur leider möchte ich C garnicht lernen.
ich versuch mich nur durch so einen 10 zeiler durchzuackern um diesen in 
asm
nachzubilden.

aufgrund der schreibweise von C ist das sehr schwierig für mich obwohl 
ich natürlich so eine liste "operatoren in C" zu rate ziehe.

da fällt es einem von euch viel leichter und geht wohl schneller als 
diese zeilen zu schreiben.

gruss klaus

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.