Тема: Бітова операція
Є код. Він правильний, але викладач сказав написати його в бітових операціях. Підкажіть,будь ласка, як це зробити
#include <iostream>
using namespace std;
int X = sizeof(long)*8;
char * getBits(long val)
{
    char * Bits = new char[X + 1];
    for(int i = 0; i < X; i++)
    {
        Bits[X - i - 1] = '0' + val % 2;
        val             = val / 2;
    }
    Bits[X] = '\0';
    return Bits;
}
char * invBits(char * Bits, int P, int N)
{
    for(int i = P, bit; i < P + N + 1; i++)
    {
        bit = Bits[X - i - 1] - '0';
        Bits[X - i - 1] = '0' + !bit;
    }
    return Bits;
}
long getNumFromBits(char * Bits)
{
    long pwr = 2;
    long val = (Bits[X - 1] - '0');
    for(int i = 1; i < X; i++)
    {
        val = val + pwr*(Bits[X - i - 1] - '0');
        pwr = pwr*2;
    }
    return val;
}
int main()
{
    int N, P;
    long val;
    char * Bits;
    cout<<"enter number : ";cin>>val;
    cout<<"enter N : ";cin>>N;
    cout<<"enter P : ";cin>>P;
    if(X < N + P + 1)
        cout<<"Chislo bitov k invertirovaniu prevoshodit razmer bitov v chisle\n";
    else
    {
        if(!(Bits = getBits(val)))
            cout<<"error get bit mask of number\n";
        else
        {
            cout<<"input  bits in number  : "<<Bits<<endl;
            Bits = invBits(Bits, P, N);
            cout<<"invert bits in number  : "<<Bits<<endl;
            val = getNumFromBits(Bits);
            cout<<"number with invert bits: "<<val<<endl;
            delete [] Bits;
        }
    }
    system("pause");
    return 0

