Вы не можете использовать 1 (int по умолчанию), чтобы переместить его за пределы int.
Существует более простой способ получить «все биты, кроме включенного MSB», для определенного типа данных
#include <iostream>
#include <limits>
using namespace std;
int main(){
unsigned long int max = std::numeric_limits<unsigned long int>::max();
unsigned long int max_without_MSB = max >> 1;
cout<< max_without_MSB <<endl;
return 0;
}
Обратите внимание на неподписанный тип. Без numeric_limits
:
#include <iostream>
using namespace std;
int main() {
long int max = -1;
unsigned long int max_without_MSB = ((unsigned long int)max) >> 1;
cout << max_without_MSB << endl;
return 0;
}