Question

J'ai signé des numéros (complément à 2) stockés dans des entiers 32 bits et je souhaite en extraire des champs de 16 bits. Est-il vrai que si j'extrais les 16 bits inférieurs d'un nombre signé de 32 bits, le résultat sera correct tant que le numéro d'origine (32 bits) tiendra dans 16 bits?

Pour les nombres positifs, c’est trivialement vrai, et il semble que ce soit aussi pour les négatifs. Mais peut-il être prouvé?

Merci d'avance

Était-ce utile?

La solution

Oui, en complément de deux, les bits de signe s'étendent "jusqu'au bout". à gauche. Lorsque vous transformez un raccourci signé en un entier signé, le numéro est " signer étendu " et a la même valeur.

Exemple: Nibble (- 2) = 1110 = > Octet (-2) = 1111_1110

Évidemment, l'inverse est également vrai, si vous capturez au moins un bit de signe, la valeur du nombre reste inchangée.

Autres conseils

D'après ma (deuxième) lecture de votre question, il ne semble pas que vous ayez besoin "d'extraire". des bits, mais plutôt convertir le nombre entier?

I.e. faire quelque chose comme ça:

int negative = -4711;
short x = (short) negative;

Dans ce cas, le compilateur veillera à ce que la précision du numéro d'origine soit convertie dans l'affectation dans la mesure du possible. Ce serait le cas même si le matériel sous-jacent n'utilisait pas le complément 2: s. Si tel est le cas, il s’agira probablement d’une troncature, comme l’a expliqué Motti.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top