Das problem ist Relativ simpel, Pascal benutzt Operator überladung für Logische und Bitweise operationen. Der "not" Operator ist für sowohl Logische negation, also auch für Bitweise Negation, die Unterscheidung ist auf basis des Typsystems, also wenn not vor einem Boolean typen steht wird Logisches Not verwendet, vor einem Ordinaltypen dann die Bitweise.
C hingegen hat zwei verschiedene Operatoren "!" für Logische negation und "~" für Bitweise, außerdem hat C keinen echten bool typen (naja mit späteren versionen schon, ich glaube C99 hat den eingeführt, bzw. C++ hat auch einen), sondern benutzt ordinaltypen. Diese beiden Sachen einzeln sind zwar kein Problem für Pascal, in Kombination allerdings schon, denn wenn man Bool werte aus C bekommt, bekommt man Ordinaltypen, womit die Operatorüberladung dann natürlich den Bitwise Operator und nicht den Logischen Operator auswählt.
Das Problem hierbei ist das Bitwise Operationen in Pascal eher Mäßig umgesetzt wurden (sollten ja Ursprünglich gar nicht Teil der Sprache sein, wurde ja Nachträglich hinzugefügt), und damit hier uneindeutigkeiten entstehen.
Die "einfachste" Lösung ist Casts:
PS: Deshalb gibt es auch die Integer Kompatiblen Booleans wie "LongBool", bei denen False = -1 = not 0 ist und somit Bitweise und Logische Operatoren identisch sind