Here is a program to swap two numbers with out using temporary variable and using shifting operations:
#include <stdio.h>
#include <conio.h>
int main(void)
{
int a,b,i,j;
clrscr();
printf(“Enter two integers: “);
scanf(“%d%d”,&a,&b);
printf(“a=%d,b=%d\n”,a,b);
for(i = 0; i < 16; i++)
{
if((a & (1 << i)) ^ (b & (1 << i)))
{
a = a ^ (1 << i);
b = b ^ (1 << i);
}
}
printf(“a=%d,b=%d”,a,b);
getch();
return 0;
}
My question is what is significance of 1 in this program?
I know the method of xoring that works as follows
a = a^b;
b = a^b;
a = a^b;
but I don’t know how above program works?
1 has one bit on the rightmost position set.
1<<ihas one bit on placeiset. This program loops through each bit, and swaps them if they are different.a&(1<<i)tests ifahas bitiset.((a&(1<<i))^(b&(1<<i)))tests if bitiinaandbare different.a=a^(1<<i)toggles biti.