Bitweise Operatoren
-
Hallo!
Ich habe ein Array von 1 Byte großen Chars. In dem char sollen Zahlen von 0 - 63 und 2 bools abgelegt werden.
Er meckert bei der Zeile 6.
unsigned char cLevel::GetBlockType(unsigned int x, unsigned int y) { if ((x >= itsWidth) || (y >= itsHeight)) return 0; return itsBlocks[x+y*itsWidth] & ~ (SlickBit | FinishBit); }Wenn ich das so schreibe, geht es:
unsigned char result = itsBlocks[x+y*itsWidth] & ~ SlickBit; result = result & ~ FinishBit; return result;Warum geht den der erste Code nicht? Da sollte doch SlickBit (64) und FinishBit (128) OR-Verknüpft werden. Es würde 192 rauskommen. Und dann nur noch negieren und AND-Verknüpfen.
Der Compiler meldet folgende, für mich unverständlich Fehler:
Fehler: expected `;' before »)« token Level.cpp line 87 1204364775606 24438 Fehler: expected `)' before »;« token Level.cpp line 87 1204364775605 24435 Fehler: expected primary-expression before »)« token Level.cpp line 87 1204364775606 24437 Fehler: expected primary-expression before »|« token Level.cpp line 87 1204364775606 24436
-
Was soll den Zeile 6 sein?
Indem was du gepostet hast, seh ich keienn Fehler
-
Danke für die Antwort.
Mit Zeile 6 meine ich die Zeilennummer vom Codeausschnitt.
Also das hier:
return itsBlocks[x+y*itsWidth] & ~ (SlickBit | FinishBit);Ich sehe darin eigentlich auch keinen Fehler.
Ich weiß nicht, ob es eine Rolle spielt, aber ich nutze Eclipse unter Ubuntu mit dem g++ Compiler.
---
Der Fehler ist weg, sobald ich SlickBit und FinishBit durch die Zahlenwerte ersetze.Ich hab den Fehler gefunden:
#define SlickBit 128; #define FinishBit 64;Ist klar, da ist einfach ein Semikolon zu viel.
Da kann ich lange suchen.Danke dir nochmal!
-
Nutze in C++ besser "const" oder "enum" anstatt defines...
-
~C++ schrieb:
Nutze in C++ besser "const" oder "enum" anstatt defines...
In C++ const, in C enum. Würd ich sagen...
-
ProgChild schrieb:
~C++ schrieb:
Nutze in C++ besser "const" oder "enum" anstatt defines...
In C++ const, in C enum. Würd ich sagen...
in C gibt es auch 'const'.
übrigens spricht nicht viel dagegen, sich konstanten mit #defines anzulegen. allerdings sind 'enums' immer das beste dafür.

-
Okay, mit den defines, enums und consts werde ich mich mal auseinandersetzen.