#include <iostream>
#include <bitset>
using namespace std;
// Function to swap bits are position p and q in integer n
int swap(int n, int p, int q)
{
// p = 8 - p;
// q = 8 - q;
// if bits are different at position p and q
if (((n & (1 << p)) >> p) ^ ((n & (1 << q)) >> q))
{
n ^= (1 << p);
n ^= (1 << q);
}
return n;
}
int main()
{
int n = 31;
int p = 2, q = 4;
cout << n << " in binary is " << bitset<8>(n) << endl;
n = swap (n, p, q);
cout << n << " in binary is " << bitset<8>(n) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Yml0c2V0Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy8gRnVuY3Rpb24gdG8gc3dhcCBiaXRzIGFyZSBwb3NpdGlvbiBwIGFuZCBxIGluIGludGVnZXIgbgppbnQgc3dhcChpbnQgbiwgaW50IHAsIGludCBxKQp7CgkvLyBwID0gOCAtIHA7CgkvLyBxID0gOCAtIHE7CgoJLy8gaWYgYml0cyBhcmUgZGlmZmVyZW50IGF0IHBvc2l0aW9uIHAgYW5kIHEKCWlmICgoKG4gJiAoMSA8PCBwKSkgPj4gcCkgXiAoKG4gJiAoMSA8PCBxKSkgPj4gcSkpCgl7CgkJbiBePSAoMSA8PCBwKTsKCQluIF49ICgxIDw8IHEpOwoJfQoJcmV0dXJuIG47Cn0KCmludCBtYWluKCkgCnsKCWludCBuID0gMzE7CglpbnQgcCA9IDIsIHEgPSA0OwoJCgljb3V0IDw8IG4gPDwgIiBpbiBiaW5hcnkgaXMgIiA8PCBiaXRzZXQ8OD4obikgPDwgZW5kbDsKCW4gPSBzd2FwIChuLCBwLCBxKTsKCWNvdXQgPDwgbiA8PCAiIGluIGJpbmFyeSBpcyAiIDw8IGJpdHNldDw4PihuKSA8PCBlbmRsOwoJCglyZXR1cm4gMDsKfQ==