Banalissimo programma per l'estrazione di bit più e meno significativi

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

void estrbit(unsigned int );


int main()
{
unsigned int num;
int scelta,nbit,risul,mask=0;
printf("Inserisci il numero intero positivo su cui lavorare: ");
scanf("%d", &num);
printf("\n");
printf("Il suo valore binario e': ");
estrbit(num);
printf("\n\n");
printf("Vuoi\n[1]Estrarre i bit piu' significativi\n[2]Estrarre i bit meno significativi\nScelta\\> ");
scanf("%d", &scelta);
printf("\n\nQuanti bit vuoi estrarre?: ");
scanf("%d", nbit);
if(scelta==1)
{
mask=(pow(2,nbit))-1;
risul=num&mask;
estrbit(risul);
}
else if(scelta==2)
{
mask=(pow(2,nbit))-1;
mask=mask<<(16-nbit);
risul=num&mask;
estrbit(risul);
}
else
printf("\nScelta Sbagliata\n\n");



system("PAUSE");
return 0;
}

void estrbit (unsigned int n)
{
int bit[16]={0,0,0,0,
0,0,0,0,
0,0,0,0,
0,0,0,0};
int i=15;
do{
bit[i]=n%2;
n=n/2;
i--;
}while(n>0);

for(i=0;i<16;i++)
{
if(i==4 || i==8 || i==12)
printf(" %d", bit[i]);
else
printf("%d", bit[i]);
}
}
Ho fatto ogni minima verifica...Il programma crasha subito dopo aver inserito il numero di bit da estrarre..

Ho provato a non rimettere la chiamata alla function estrbit .. Ma crasha uguale..
Ho provato a fargli fare altre operazioni senza usare i bitwise..ma crasha comunque..

Scusate la mia ottusaggine ma confido nella vostra immensa pazienza

P.S. .. una volta risolto il problema...sapete anche dirmi se l'algoritmo è fatto bene?..Il programma consiste in una estrazione di bit meno o più significatvi..e sinceramente non mi è chiara la richiesta visto che quando si parli di meno e più significativi si parla di ZERI no di BIT...anche perchè il BIT 1 non può essere mai "meno significativo" visto che la sua assenza porta comunque ad un cambio del valore originale