BIT Manipulations
#include <bits/stdc++.h>
using namespace std;
//get a bit:
int getBit(int n, int i){
//check whether at i, n contains is 0 or 1.
// n = 0101, i = 2
// 1<<i = x --> 1<<2 --> 0100 (at i it makes 1, so using & it ll be beneficial for 1 or 0 prediction.)
// n & x
return (n & (1<<i));
}
//set a bit at i: means place 1 at i in n:
int setBit(int n, int i){
//make 1 no matter.
return (n | (1<<i));
}
//clear bit at i: means place 0 at i in n:
int clearBit(int n, int i){
//make a mask(~ ones complement--> flip 1 by 0 and 0 by 1)
//then mask & n
int mask = ~(1<<i);
return (n & mask);
}
//update a bit at pos with 0 or 1:
int updateBit(int n, int i, int k){
if(k == 1){
//set():
return (n | (1<<i))
}
else{
//clear():
int mask = ~(1<<i);
return (mask & n);
}
}
int main(){
//BIT MANIPULATIONS:
int n;
cin >> n;
int i;
cin >> i;
cout << getBit(n, i) << endl;
cout << clearBit(n, i) << endl;
cout << setBit(n, i) << endl;
return 0;
}
Comments
Post a Comment