Битовые сдвиги в C ++

Я не понимаю, почему это дает мне тот же ответ:

 long long a = 3265917058 >> 24;
 std::cout << a << std::endl; //194

 long long ip = 3265917058;
 long long b = ip >> 24;
 std::cout << b << std::endl; //194

но это не так:

 long long a = (3265917058 << 16) >> 24;
 std::cout << a << std::endl; //240

 long long ip = 3265917058;
 long long b = (ip << 16) >> 24;
 std::cout << b << std::endl; //12757488 - **i want this to be 240 too!**

Обновление: я хочу 32-битный сдвиг, но как можно я 32-битный сдвиг числа, которое слишком велико для переменной int? Update2: Мой ответ - сделать unsigned int ip. Тогда все будет хорошо.

5
задан Stals 2 October 2013 в 10:12
поделиться