Perché shifti di 2 bit a destra?

Io pensavo a qualcosa del genere

unsigned int jmp_code = (addr_code & 0x03FFFFFF) | 0x08000000;

ma non penso ancora di aver compreso appieno il problema.

Non mi hai ancora detto con quale sistema e compilatore C stai lavorando.