Find the Highest Bit Set for any given Integer
#include
#define num_bits sizeof(int)*8
int highest_bit_set(int);
void display(int);
int i = num_bits;
void main()
{
int num, pos;
printf("\nenter the number:");
scanf("%d", &num);
display(num);
pos = highest_bit_set(num);
printf("\nthe position of the highest bit set is %d", pos);
}
int highest_bit_set(int num)
{
int count = 0;
while (num >> 1 != 0)
{
count++;
num = num >> 1;
}
return(count);
}
void display(int num)
{
int c;
c = num & 1;
if (i > 0)
{
i--;
display(num >> 1);
}
printf("%d", c);
}
Output
Enter the number:10000
000000000000000000010011100010000
The position of the highest bit set is 13
Count Number of bits set to 0 in an Integer
#include
#include
#define num_bits_int (8*sizeof(int))
int count_unset(int);
int main()
{
int i, num, snum, res, count = 0;
clrscr();
printf("\nEnter the number");
scanf("%d", &num);
for (i = 0;i <= num_bits_int;i++)
{
snum = num >> i;
res = snum & 1;
if (res == 0)
count++;
}
printf("%d", count);
getch();
}
Output
Enter the number128
31
Enter the number -127
6
Replace Bits in Integer from Specified Positions from Another Integer
#include
#include
void replace_bits(int, int, int, int);
int main()
{
int number_x, number_y, start_pos, end_pos;
clrscr();
printf("\nEnter the number x in hexa decimal ");
scanf("%x", &number_x);
printf("\nEnter the number y in hexa decimal");
scanf(" %x", &number_y);
printf("\nEnter value for a");
scanf("%d", &start_pos);
printf("\nEnter value for b");
scanf("%d", &end_pos);
replace_bits(number_x, number_y, start_pos, end_pos);
}
void replace_bits(int number_x, int number_y, int start_pos, int end_pos)
{
int i, shift_y, ybit;
long int temp, t;
for (i = start_pos;i <= end_pos;i++)
{
shift_y = number_y >> i;
ybit = shift_y & 1;
if (ybit == 1)
{
temp = 1 << i;
number_x = number_x | temp;
}
if (ybit == 0)
{
t = 0XFFFFFFFF;
temp = 1 << i;
start_pos = t ^ temp;
number_x = number_x & start_pos;
}
}
printf("%x", number_x);
getch();
}
Output
Enter the number x in hexa decimal 11223344
Enter the number y in hexa decimal55667788
Enter value for a12
Enter value for b19
11267344
Byte as Input and returns all the Bits between given Positions
#include
#include
int number_between_bit_positions(int,int,int);
int result = 0;
int main()
{
int number, start_pos, end_pos;
clrscr();
printf("\nEnter the number");
scanf("%d", &number);
printf("\nEnter the position of a and b");
scanf("%d %d", &start_pos, &end_pos);
result = number_between_bit_positions(number, start_pos, end_pos);
printf("Byte Equivalent of bits between %d and %d positions %d", start_pos, end_pos, result);
}
int number_between_bit_positions(int number, int start_pos , int end_pos)
{
int i, j, shift_num, res_val;
for (i = start_pos, j = 0;i <= end_pos;i++,j++)
{
shift_num = number >> i;
res_val = shift_num & 1;
res_val = res_val << j;
result += res_val;
}
return result;
getch();
}
Output
Enter the number78
Enter the position of a and b
3
6
Byte Equivalent of bits between 3 and 6 positions is 9
Swap the ith and jth Bits for a 32 Bit Integer
#include
#include
int swap(int ,int);
int number, pos1, pos2;
int main()
{
int result, shift_pos1, shift_pos2;
clrscr();
printf("\nEnter Number");
scanf("%d", &number);
printf("\nEnter bit positions to swap");
scanf("%d %d", &pos1, &pos2);
shift_pos1 = number >> pos1;
shift_pos2 = number >> pos2;
result = swap(shift_pos1&1, shift_pos2&1);
printf("%d\n", result);
}
int swap(int pos1_val, int pos2_val)
{
int temp1, temp2;
long int base, base1;
if (pos1_val == 1)
{
base1 = 1 << pos2;
number = number + base1;
}
if (pos2_val == 1)
{
base1 = 1 << pos2;
number = number + base1;
}
if (pos1_val == 0)
{
base = 0XFFFFFFFF;
base1 = 1 << pos2;
temp1 = base ^ base1;
number = number & temp1;
}
if (pos2_val == 0)
{
base = 0XFFFFFFFF;
base1 = 1 << pos1;
temp2 = base ^ base1;
number = number & temp2;
}
return number;
getch();
}
Output
Enter Number101
Enter bit positions to swap2 4
113
No comments:
Post a Comment