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
Gast
#1706156
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.
Bitmanipulation EDIT: 0b00000010 ^ 0b00000100 = 0b00000110 Andere Schreibweise #define REPEAT_MASK ((1<<KEY1)|(1<<KEY2))
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.
danke .. das war schonmal super und ist damit geklärt. gruss klaus
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
Gast
#1706209
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.
@ 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
Bitte melde dich an, um einen Beitrag zu schreiben.