int bit_array[32];
void show_bits(int val);
void set_p_n_bits(int val, int p, int n);
int main()
{
int a,p,n;
printf("enter a number in hex\n");
scanf("%x", &a);
printf("enter a pth position\n");
scanf("%x", &p);
printf("enter number of bits\n");
scanf("%x", &n);
printf("\nafter setting %d bits from %dth position\n",n,p);
set_p_n_bits(a,p,n);
return 0;
}
void show_bits(int val)
{
int i;
for(i=0;i<32;i++)
{
bit_array[31-i] = (val & 1);
val = val >> 1;
}
for(i=0;i<32;i++)
printf("%d",bit_array[i]);
}
//create mask
//111111111111111111
//000011111111111111 --> 4 shifts
//111100000000000000 --> negation
//000000001111000000 ---> shift 31-p
//if p = 10
// n = 4
//pth bit
//n is number of bits to be set.
void set_p_n_bits(int val, int p, int n)
{
int mask = (~(0xffffffff >> n) >> (31-p));
printf("val is %x = ",val);
show_bits(val);
printf("\nmask is ");
show_bits(mask);
val = val | mask;
printf("\nmodified val is %x = ",val);
show_bits(val);
return;
}
No comments:
Post a Comment