J'ai le code suivant:Pourquoi -1 >> 1 est -1? Et 1 >> 1 est 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;
Le résultat est:
-5
-5
-4
-4
-3
-3
-2
-2
-1
-1
Mais pourquoi?
-1
est 1111 1111
(pour 1 octet), -1 >>
1 doit être: 1011 1111
et ce n'est pas -1
ou 0
! (signe-bit n'est pas décalé, je sais)
Quelqu'un peut-il m'expliquer comment cela fonctionne?
chaque bit est décalé, et il n'y a pas de bit de signe explicite dans le complément à deux. – jalf