salve,
implementando questo codice, sn arrivato che il mio short A, per esempio è 5, quando lo chiamo nella funzione bit_short, mi modifica il suo valore con 0, quindi prima che modifica il valore me lo salvo nella variabile b.
codice:
#include <stdio.h>
#include <stdlib.h>
#define n_len 8
void bit_short(short *n, unsigned char bit[n_len]);
void estrai_bit_meno_sign( short *, short k, unsigned char bit[n_len]);
int main()
{
short A,k,i,b;
unsigned char bit[n_len];
printf("numero:"); scanf("%d",&A);
b=A; //mi salvo il valore di A prima che lo perdo nella bit_short
bit_short(&A,bit);
printf("in binario:");
for(k=0; k<n_len; k++)
(k%4==0) ? printf(" %1u",bit[k]): printf("%1u",bit[k]);
printf("\n");
printf("quanti bit meno significativi vuoi estrarre? :");
scanf("%d",&k);
printf("i bit meno significativi: ");
estrai_bit_meno_sign(&b,k,bit);
printf("\n");
system("PAUSE");
return 0;
}
void bit_short(short *n, unsigned char bit[n_len])
{
short j;
j=n_len-1;
do {
bit[j--]=*n&1;
*n=*n>>1;
} while(*n !=0 && j>=0);
if(j>=0)
{
do{
bit[j--]=0;
} while(j>=0);
}
}
void estrai_bit_meno_sign(short *n, short k,unsigned char bit[n_len])
{unsigned short mask=~((~0u)<<k); // mi creo una maskera
short i;
for(i=0; i<k; i++){
bit[i]=*n&mask; //faccio l'and della mia variabile con la maskera
printf("%u",bit[i]);
}
}
come faccio a visualizzare solo quei bit che mi interessano?