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.


Anmelden zum Antworten