#include <stdio.h>
int setbits(int x, int y,int n,int p);
int main(void)
{
int x,y,n,p,ris;
printf("inderisci il primo numero\n");
scanf("%d",&x);
printf("inserisci il secondo numero\n");
scanf("%d",&y);
printf("quanti bit devo modificare dal primo numero?\n");
scanf("%d",&n);
printf("da che bit devo cominciare??\n");
scanf("%d",&p);
ris=setbits(x,y,n,p);
printf("risultato finale : %d\n",ris);
return 0;
}
int setbits(int x,int y,int n,int p)
{
int i,mask,second_mask,app,copiax,ris2;
mask=second_mask=0;
copiax=x;// mi serve per non perdere gli altri bit che non verranno modificati
app=0;
for(i=0;i<n;++i)
mask|=(1<<p+i); // creo la maschera shiftata già in posizione giusta
// esempio devo estrapolare 3 bit partendo dal secondo bit? produrrà 11100
app=mask&y;// estrapolo i bit che mi interessano di y; salvo solo i bit che mi servono
// for(i=0;i<n;i++) operazione che tu hai detto essere inutile io l'avevo pensata perché credevo che altrimenti potevo incorrere in problemi
// second_mask|=(0<<p+i);
ris2=second_mask&x; // azzero ris 2 mettendo tutto in & con 0
ris2=ris2|app; // adesso ris2 contiene app(ricordando che app contiene i bit estrapolati da y
ris2=ris2|x; // adesso devo riattaccare i bit che c'erano prima e dopo quelli modificati
return ris2; // una volta finito restituisco tutto al mittente
}
ti ho voluto proporre il mio modo di creare questa maschera per il semplice motivo che il mio professore tramite email mi ha proposto a me questo metodo per crearla