Тема: Бітова операція
Є код. Він правильний, але викладач сказав написати його в бітових операціях. Підкажіть,будь ласка, як це зробити
#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