Почему -1 >> 1 равно -1? И 1 >> 1 равно 0!

У меня следующий код:

std::cout << (-10 >> 1) << std::endl;
std::cout << (-9 >> 1) << std::endl;
std::cout << (-8 >> 1) << std::endl;
std::cout << (-7 >> 1) << std::endl;
std::cout << (-6 >> 1) << std::endl;
std::cout << (-5 >> 1) << std::endl;
std::cout << (-4 >> 1) << std::endl;
std::cout << (-3 >> 1) << std::endl;
std::cout << (-2 >> 1) << std::endl;
std::cout << (-1 >> 1) << std::endl;

Результат:

-5
-5
-4
-4
-3
-3
-2
-2
-1
-1

Но почему?

-1 равно 1111 1111 (для 1 байта), -1 >> 1 должно быть: 1011 1111 , а не -1 или 0 ! (бит знака не сдвигается, я знаю)

Кто-нибудь может объяснить мне, как это работает?

16
задан Mateen Ulhaq 25 April 2011 в 06:36
поделиться