#include <iostream>
#include <iomanip>
using namespace std;
char* getBit(int n, char *str) {
int size = 8 * sizeof(int);
for (int i = size - 1; i >= 0; n >>= 1) {
str[i--] = (n & 1) + '0';
}
str[size] = '\0';
return str;
}
int toBit(char *str) {
int n = 0;
for (int i = 0; str[i] != '\0'; i++) {
n <<= 1;
n += str[i] - '0';
}
return n;
}
int invert_end(int n, int w) {
int mask = 0;
int bitval = 1;
while (w-- > 0) {
mask |= bitval;
bitval <<= 1;
}
return n ^ mask;
}
int main(void) {
int a = 125;
int b = 6;
char *str = new char[101];
str = getBit(a, str);
cout << setfill('0') << setw(8 * sizeof(int)) << str << endl;
cout << toBit(str) << endl;
a = invert_end(a, b);
str = getBit(a, str);
cout << setfill('0') << setw(8 * sizeof(int)) << str << endl;
cout << toBit(str) << endl;
return 0;
}