You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
1.6 KiB
C

/*
* C Program to Swap the ith and jth Bits for a 32-Bit Integer
*/
#include <stdio.h>
int swap(int,int);
int number, pos1, pos2;
int main()
{
int result, shift_pos1, shift_pos2;
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 the pos1_val value is 1 then only pos2_val th bit is set to 1 by using << and + operators
*/
if (pos1_val == 1)
{
base1 = 1 << pos2;
number = number + base1;
}
/*
*If the pos2_val value is 1 then only pos2_val th bit is set to 1 by using << and + operators
*/
if (pos2_val == 1)
{
base1 = 1 << pos2;
number = number + base1;
}
/*
*If the pos1_val value is 0 then only pos2_val th bit is set to 0 using <<, ^ and & operators
*/
if (pos1_val == 0)
{
base = 0XFFFFFFFF;
base1 = 1 << pos2;
temp1 = base ^ base1;
number = number & temp1;
}
/*
*If the pos2_val value is 0 then only pos1_val th bit is set to 0 using <<, ^ and & operators
*/
if (pos2_val == 0)
{
base = 0XFFFFFFFF;
base1 = 1 << pos1;
temp2 = base ^ base1;
number = number & temp2;
}
return number;
}