mikrocontroller.net

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


Autor: Klaus De lisson (kolisson)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitmanipulation

EDIT:
0b00000010 ^ 0b00000100 = 0b00000110

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Klaus De lisson (kolisson)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke ..
das war schonmal super und ist damit geklärt.

gruss klaus

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: tuppes (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Klaus De lisson (kolisson)
Datum:

Bewertung
0 lesenswert
nicht 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

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.