Dein BitAtPos liefert einen Integer zurück.
Aber war das nicht die Frage?
Integer und Cardinal sind beide 32-Bit und nehmen den gleichen MemorySpace ein.
Nur dass Integer von außen als positiv oder negativ interpretiert wird und Cardinal als ausschließlich positiv,
der eigentliche Speicherbereich ist aber nach wie vor gleich.
Ich vermute, dass es an auch dieser Zeile liegt, wo das shl eben nicht das Integer richtig weiterschieben kann.
Result := Integer(1) shl (BitPos - 1);
Ja, das ganze als Cardinal oder UInt32 sollte das lösen.
Ich habe die Frage aber so verstanden, warum die Zeile oben eben bei Integer das Bit nicht richtig weiterschiebt, bei Cardinal aber doch.
https://www.oreilly.com/library/view...595/re295.html