Au début, je voulais poser une question, mais finalement, je pense avoir trouvé, alors je voulais vous faire part de cette bizarrerie.
Voici un petit code :
char test = 0xA0;
....
test = test >> 4;
Avec mon collegue (oui, c´est au boulot qu´on vient de se casser la tete avec ça) on était sur qu´on aurait 0x0A dans test.
Quelle ne fut pas notre surprise, quand, en débuggant, nous avons vu : 0xFA dans le résultat !! !
Voici l´explication (hypothese) que l´on a :
la variable test et est chargée dans le registre EAX du processeur. Comme c´est un char, seul AL est mis a jour (le registre de poids faible du registre 32 bits EAX)
du coup, les autres octets de EAX ne sont pas touchés.
est basé sur des int.
de ce fait, c´est tout EAX qui est shifté.
Le F qui apparait vient donc du 2e octet de EAX qui n´était pas nul (du a une opération précédente)
Un sacré piege qui nous a bien étonné...
Avez vous déja eu ça ?