Marketshare Inc. Interview Question
Java DevelopersCountry: India
public class SwapIthAndJthBits
{
public int swap(int n, int i, int j)
{
int a = (1 << i);
int b = (1 << j);
int x = n & a;
int y = n & b;
if ( (x > 0 && y == 0)
||(x == 0 && y > 0))
{
x = (1<<i);
y = (1<<j);
n = n ^ (x | y);
}
return n;
}
/**
* @param args
*/
public static void main(String[] args)
{
int n = 29;
int r = new SwapIthAndJthBits().swap(n, 1, 4);
System.out.println(r);
}
}
public class Interview {
public static void main(String[] args) {
int a = 0x800F0001;
System.out.println(intToBinaryString(a) + "\n" + intToBinaryString(swap(a, 1, 12)));
}
private static int swap(int n, int i, int j) {
int swap = 0;
int a = 0x80000000 >>> i;
int b = 0x80000000 >>> j;
int x = n & a;
int y = n & b;
if (((x!=0) && (y==0)) || ((y!=0) && (x==0))) {
swap = n ^ (a | b);
} else {
swap = n;
}
return swap;
}
private static String intToBinaryString(int n) {
return String.format("%32s", Integer.toBinaryString(n)).replace(' ', '0');
}
Output:
10000000000011110000000000000001
11000000000001110000000000000001
int main () {
unsigned char v = 128;
int swp1 = 7;
int swp2 = 0;
unsigned char tmp1 = (1 << swp1) & v;
unsigned char tmp2 = (1 << swp2) & v;
if (swp1 > swp2) {
tmp1 = tmp1 >> (swp1 - swp2);
tmp2 = tmp2 << (swp1 - swp2);
} else {
tmp1 = tmp1 << (swp2 - swp1);
tmp2 = tmp2 >> (swp2 - swp1);
}
tmp1 = tmp1 | tmp2 ;
v &= ~(1 << swp1);
v &= ~(1 << swp2);
printf("Final value = %d\n", tmp1 | v);
}
#include <stdio.h>
int main()
{
int str;
int m = 0, n = 0;
int i,j;
printf("enter integer, i value, j value \n");
scanf("%d%d%d",&str,&i,&j);
if(str & (1 << i))
m = 1;
if(str & (1 << j))
n = 1;
if(m)
{
str |= (1 << j);
}
else
{
str &= (~(1<<j));
}
if(n)
{
str |= (1 << i);
}
else
{
str &= (~(1<<i));
}
printf("str = %d\n", str);
return 0;
}
//Careercup
//How do you swap bits at indexes i & j of a 32-bit memory word?
#include<iostream>
using namespace std;
int main()
{
int num = 0;
int i = 0;
int j = 0;
cout<<"Enter Num \n";
cin>>num;
do
{
cout<<"\n Enter i position (0-31)"<<endl;
cin>>i;
}while(i < 0 || i > 31);
do
{
cout<<"\n Enter j position (0-31)"<<endl;
cin>>j;
}while(j < 0 || j > 31);
num = num ^ (1<<i) ^ (1 <<j);
cout<<"After Swaping bits num = "<<num;
}
- Miguel Oliveira June 05, 2014