Codice:
#include <stdio.h>
int PIU_SIGNIFICATIVI(int A,int k);
int MENO_SIGNIFICATIVI(int A,int k);
void dec2bin(unsigned int inp, char binstr[32]);
main()
{
int A,k,X,n;
short i,scelta;
char Array[32];
puts("Digita un valore A (max 4294967295)");
scanf("%d",&A);
puts("Digita quanti bit vuoi estrarre (max 32)");
scanf("%d",&k);
puts("Digita se estrarre i bit piu' significativi o meno significativi");
puts("Meno significativi [0]");
puts("Piu' significativi [1]");
scanf("%hd",&scelta);
while (!(scelta==0 || scelta==1))
{
puts ("Scelta errata, riprovare");
scanf("%hd",&scelta);
}
if (scelta==0)
{
X=MENO_SIGNIFICATIVI(A,k);
dec2bin (X,Array);
printf("Risultato binario X=");
for (i=k-1;i>=0;i--)
printf("%c",Array[i]);
}
else if (scelta==1)
{
X=PIU_SIGNIFICATIVI(A,k);
dec2bin (X,Array);
printf("Risultato binario X=");
for (i=31;i>=(31-k);i--)
printf("%c",Array[i]);
}
printf("\n");
system("pause");
}
int PIU_SIGNIFICATIVI(int A,int k)
{
int mask=1;
//Creazione maschera
mask=mask<<k;
mask--;
mask=mask<<(32-k);
// return (int)(((unsigned int) A)>>(32-k));
return A&mask;
}
int MENO_SIGNIFICATIVI(int A,int k)
{
short b;
int mask=0;
for(b=0;b<k;b++)
mask=mask<<1|1;
return mask&A;
}
void dec2bin(unsigned int inp, char binstr[32])
{
int i;
for (i = 0; i < 32; i++, inp >>= 1)
binstr[i] = (inp & 1) + '0';
}
Finalmente finita, dopo ore e ore di prove
@andbin
carina la tua function per il dec2bin, molto compatta, peccato che pero' che non inverta pure l'array che deve essere stampato al contrario, altrimenti sarebbe perfetta