Tuesday, October 28, 2014

C Bit Pro



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