Lo más cómodo es utilizar cadenas, un bit en cada char.
Pero tampoco es muy difícil utilizar enteros de 32 bits, un bit por bit, que es más rápido que lo anterior si utilizas los operadores de bits: AND OR XOR para enteros y los desplazadores SHR SHL. La única limitante es que tus variables (no todo el segmento de "código genético", sino cada una de tus variables) quedarán limitadas a un máximo 32 bits por algunos detalles de implementación y por optimización. Esta limitación generalmente no es problema por que 32 bits de precisión para cada variable (en el contexto de algoritmos genéticos) es precisión de sobra siempre y cuando "normalizes" tus variables para optimizar el consumo de tiempo de CPU (reduciendo el espacio de búsqueda) aprovechando de esta form cada bit que asignes a tus variables.