Encoding the values as bits isn't necessary. Look at 2d box car (don't waste too much time on it) for an example where the crossover is done on whole (float) values. Entire 'assemblies' are crossed over, this adds to the recognizability of the source (part of the aesthetics of the game), but makes it it so that the variations between a given chromosome and its parents are more limited.
The reason to consider using bits instead of integers has to do with the range of data that the pool is seeded with. Having 35 integers means that cross over can only occur on 35 values that are taken as whole values. having 1120 bits (35 * 32 bit integers) gives a finer granularity (consider traditional 'genetic algorithms' work on ATCG - not entire 'values' of amino acids or proteins).
Having bits lets you have 'cleaner' mutations (flip a bit) and crossover that takes the top part of one integer and the bottom part of another. Both of these things help increase the potential variety of offspring.
Consider the chromosome of just two bytes (we're doing bytes rather than integers to make it easier to see):
chromosome 1: 0xA3 0xB2
chromosome 2: 0x12 0x34
Cross over between these two chromosomes can happen only at limited places. You'll end up with:
chromosome 1': 0x12 0xB2
chromosome 2': 0xA3 0x34
If this was done as bits instead:
chromosome 1: 1010001110110010
chromosome 2: 0001001000110100
^ ^
Now you can select the ^
sites for crossover giving:
chromosome 1': 1010001000110010
chromosome 2': 0001001110110100
^ ^
This provides a richer model with more possible variations between two chromosomes.