У меня следующий код:
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
! (бит знака не сдвигается, я знаю)
Кто-нибудь может объяснить мне, как это работает?