The shift doesn't represent the max value that the year can take (even though you made a mistake in your calculation, that's not the reason we shift 9 on the left). The shift lets you define ranges which will be used for each value. Below is an ascii that shows how the values will be organized in an Int32
after the values are shifted
11111111111111111111111 1111 11111
-----------yyyyyyyyyyyY mmmM ddddD
Since a day value can be at most 31, 5 bits will suffice (32 possible values). For the month, we will need 4 bits (16 possible values) which will accomodate our 12 possibilities. The year needs at least 12 bits if we want our smart date scheme to continue after 2048. We still have some room on the left to last for a long time.
So that is why we shift the month value 5 times, and the year value 9 times. Also that's why an Int16 is not enough, we need more bits than 16 to store our date