Tuesday, May 5, 2015

Subtract two numbers using bit manipulation

Subtracting numbers is done similar to add number(refer previous post in this blog) with minor difference. Instead of direct and between x and y . We take negation of x to and.
#include<stdio.h>
int subtract(int x, int y)
{
// Iterate till there is no carry
while (y != 0)
{
// borrow contains common set bits of y and unset
// bits of x
int borrow = (~x) & y;
// Subtraction of bits of x and y where at least
// one of the bits is not set
x = x ^ y;
// Borrow is shifted by one so that subtracting it from
// x gives the required sum
y = borrow << 1;
}
return x;
}
// Driver program
int main()
{
int x = 29, y = 13;
printf("x - y is %d", subtract(x, y));
return 0;
}

Adding two numbers using bit manipulation

Adding of two numbers can be done with bit manipulation. The operation if we examine atomically mirrors the actual operation we do while adding two numbers. Here is sample code:
#include<stdio.h>
int Add(int x, int y)
{
// Iterate till there is no carry
while (y != 0)
{
// carry now contains common set bits of x and y
int carry = x & y;
// Sum of bits of x and y where at least one of the bits is not set
x = x ^ y;
// Carry is shifted by one so that adding it to x gives the required sum
y = carry << 1;
}
return x;
}
int main()
{
printf("%d", Add(30, 32));
return 0;
}
view raw addnumbers.c hosted with ❤ by GitHub