num |= 20<<7;
num |= 2<<13;

printf("num=%d\n",(num&4095)>>7); //1
printf("num=%d\n",(num&16383)>>13); //2

上の1はうまく20が出るのですが,下の2は値が0と出てしまいます。
4095は12ビット目まで全部が1で,16383は14ビット目まで全部1です。