Wahrheitsausdruck



  • Hallo

    Ich bin immer noch nicht so ganz sicher, wie ein Wahrheitsausdruck aussehen muss und ob jetzt true oder 1 für einen wahren Ausdruck ausgewertet wird.

    In diesem Beispiel mache ich es ziemlich naiv:

    switch (direction) {
      case 1:
      case 8:
        if ((rook_attack_bitboard(king_square(me), blockers) & rook_and_queen_bitboard(you)) != 0) return 1;
        break;
    
      case 7:
      case 9:
        if ((bishop_attack_bitboard(king_square(me), blockers) & bishop_and_queen_bitboard(you)) != 0) return 1;
        break;
      }
    
      return 0;
    

    Würde es auch so gehen und was wäre der Returnwert, bool (false/true) oder int (0/1) ?

    switch (direction) {
      case 1:
      case 8:
        return ((rook_attack_bitboard(king_square(me), blockers) & rook_and_queen_bitboard(you)) != 0);
    
      case 7:
      case 9:
        return ((bishop_attack_bitboard(king_square(me), blockers) & bishop_and_queen_bitboard(you)) != 0);
      }
    

    Danke für eure Aufklärung!



  • probier's aus -- müsste klappen. Die bool->int Konvertierung macht aus false 0 und aus true 1.



  • Ich würde bei boole-Variablen true/false verwenden. Ist einfach schöner.

    Aber, es gilt 0 entspricht false und alles verschieden von 0 ist true.

    Achte noch genau auf die Operatorn. & und && haben verschiedene Bedeutung und ich bin mir nicht sicher ob du tatsächlich & gemeint hast. 😉

    Der return-Wert hängt davon ab, ob in der Definition deiner Funktion int oder boole als Rückgabetyp vorgesehen sind. Es wird dann intern in den entsprechenden Typ umgewandelt.



  • HurgaHurga schrieb:

    Ich würde bei boole-Variablen true/false verwenden. Ist einfach schöner.

    Aber, es gilt 0 entspricht false und alles verschieden von 0 ist true.

    Achte noch genau auf die Operatorn. & und && haben verschiedene Bedeutung und ich bin mir nicht sicher ob du tatsächlich & gemeint hast. 😉

    Der return-Wert hängt davon ab, ob in der Definition deiner Funktion int oder boole als Rückgabetyp vorgesehen sind. Es wird dann intern in den entsprechenden Typ umgewandelt.

    Die Verwendung von & ist schon korrekt. Es werden 64-Bit Bitmasken geprüft. Diese Funktion gibt int-Werte zurück, sind allerdings nur Wahrheitswerte, also 0 oder nicht 0.



  • OK.

    Den Vergleich auf != 0 kannst du dir übrigens sparen.

    1 != 0 ergibt 1
    0 != 0 ergibt 0

    Macht die Klammerung vielleicht etwas übersichtlicher.



  • Mach dir nicht so viele Gedanken um bool oder int! In C und C++ gibt es den Datentyp 'bool' nicht, er ist 'int'. Ein Wert 0 ist false, alles andere ist true. Die verfügbaren Werte FALSE und TRUE sind defines auf 0 und 1. Die Schlüssigkeit einer if-Abfrage obliegt dem Programmierer!


  • Mod

    berniebutt schrieb:

    Mach dir nicht so viele Gedanken um bool oder int! In C und C++ gibt es den Datentyp 'bool' nicht, er ist 'int'. Ein Wert 0 ist false, alles andere ist true. Die verfügbaren Werte FALSE und TRUE sind defines auf 0 und 1. Die Schlüssigkeit einer if-Abfrage obliegt dem Programmierer!

    *Räusper*

    In C vielleicht nicht, in C++ gibt es sehr wohl einen Datentyp bool. C++ Standard, 3.9.1,6.



  • In C vielleicht nicht, in C++ gibt es sehr wohl einen Datentyp bool. C++ Standard, 3.9.1,6.

    Stimmt so auch nicht. Seit C99 gibts <stdboo.h>


  • Mod

    besserwisser schrieb:

    Stimmt so auch nicht. Seit C99 gibts <stdboo.h>

    Cool, wusste ich noch gar nicht. Das muss ich mir merken.



  • SeppJ schrieb:

    besserwisser schrieb:

    Stimmt so auch nicht. Seit C99 gibts <stdboo.h>

    Cool, wusste ich noch gar nicht. Das muss ich mir merken.

    Ja, man spart dann bei jeder Deklaration vielleicht einige wenige Bytes. Ist das relevant und wollte der Fragesteller das wissen?



  • berniebutt schrieb:

    SeppJ schrieb:

    besserwisser schrieb:

    Stimmt so auch nicht. Seit C99 gibts <stdboo.h>

    Cool, wusste ich noch gar nicht. Das muss ich mir merken.

    Ja, man spart dann bei jeder Deklaration vielleicht einige wenige Bytes. Ist das relevant und wollte der Fragesteller das wissen?

    Stimmt so nicht. In <stdbool.h> ist bool eigentlich ein typedef auf int.


Anmelden zum Antworten