BIT Manipulations

#include <bits/stdc++.h>
using namespace std;

//get a bit:
int getBit(int nint 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 nint i){
    //make 1 no matter.
    return (n | (1<<i));
}  


//clear bit at i: means place 0 at i in n:
int clearBit(int nint 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 nint iint 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

Popular Posts